home *** CD-ROM | disk | FTP | other *** search
/ Apple Reference & Presen…on Library 1994 September / ARPLE-Sept-94-Supplement.iso / AppleSoft / QuickTime 2.0 / Interfaces / QuickTimeComponents.h < prev   
Encoding:
C/C++ Source or Header  |  1994-06-20  |  126.9 KB  |  3,363 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        QuickTimeComponents.h
  3.  
  4.     Copyright:    © 1991-1994 by Apple Computer, Inc., all rights reserved.
  5.  
  6. */
  7.  
  8. #ifndef __QUICKTIMECOMPONENTS__
  9. #define __QUICKTIMECOMPONENTS__
  10.  
  11. #ifndef __COMPONENTS__
  12. #include <Components.h>
  13. /*    #include <Types.h>                                            */
  14. /*        #include <ConditionalMacros.h>                            */
  15. /*        #include <MixedMode.h>                                    */
  16. /*            #include <Traps.h>                                    */
  17. #endif
  18.  
  19. #ifndef __IMAGECOMPRESSION__
  20. #include <ImageCompression.h>
  21. /*    #include <Quickdraw.h>                                        */
  22. /*        #include <QuickdrawText.h>                                */
  23. /*            #include <IntlResources.h>                            */
  24. /*    #include <QDOffscreen.h>                                    */
  25. /*    #include <StandardFile.h>                                    */
  26. /*        #include <Dialogs.h>                                    */
  27. /*            #include <Windows.h>                                */
  28. /*                #include <Events.h>                                */
  29. /*                    #include <OSUtils.h>                        */
  30. /*                #include <Controls.h>                            */
  31. /*                    #include <Menus.h>                            */
  32. /*            #include <TextEdit.h>                                */
  33. /*        #include <Files.h>                                        */
  34. /*            #include <SegLoad.h>                                */
  35. /*    #include <ToolUtils.h>                                        */
  36. /*        #include <TextUtils.h>                                    */
  37. /*            #include <Script.h>                                    */
  38. /*        #include <FixMath.h>                                    */
  39. #endif
  40.  
  41. #ifndef __MOVIES__
  42. #include <Movies.h>
  43. /*    #include <Aliases.h>                                        */
  44. /*        #include <AppleTalk.h>                                    */
  45. #endif
  46.  
  47. #ifndef __QUICKDRAW__
  48. #endif
  49.  
  50. #ifndef __VIDEO__
  51. #include <Video.h>
  52. #endif
  53.  
  54. #ifndef __Dialogs__
  55. #endif
  56.  
  57. #define clockComponentType 'clok'
  58.  
  59. #define systemTickClock 'tick'
  60.  
  61. #define systemSecondClock 'seco'
  62.  
  63. #define systemMillisecondClock 'mill'
  64.  
  65. #define systemMicrosecondClock 'micr'
  66.  
  67. enum  {
  68.     kClockRateIsLinear            = 1,
  69.     kClockImplementsCallBacks    = 2
  70. };
  71.  
  72. #define ClockGetTime GetClockTime
  73.  
  74. #ifdef __cplusplus
  75. extern "C" {
  76. #endif
  77.  
  78. extern pascal ComponentResult GetClockTime(ComponentInstance aClock, TimeRecord *out)
  79.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1, 0x7000, 0xA82A);
  80. extern pascal QTCallBack ClockNewCallBack(ComponentInstance aClock, TimeBase tb, short callBackType)
  81.  FIVEWORDINLINE(0x2F3C, 0x6, 0x2, 0x7000, 0xA82A);
  82. extern pascal ComponentResult ClockDisposeCallBack(ComponentInstance aClock, QTCallBack cb)
  83.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3, 0x7000, 0xA82A);
  84. extern pascal ComponentResult ClockCallMeWhen(ComponentInstance aClock, QTCallBack cb, long param1, long param2, long param3)
  85.  FIVEWORDINLINE(0x2F3C, 0x10, 0x4, 0x7000, 0xA82A);
  86. extern pascal ComponentResult ClockCancelCallBack(ComponentInstance aClock, QTCallBack cb)
  87.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  88. extern pascal ComponentResult ClockRateChanged(ComponentInstance aClock, QTCallBack cb)
  89.  FIVEWORDINLINE(0x2F3C, 0x4, 0x6, 0x7000, 0xA82A);
  90. extern pascal ComponentResult ClockTimeChanged(ComponentInstance aClock, QTCallBack cb)
  91.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  92. extern pascal ComponentResult ClockSetTimeBase(ComponentInstance aClock, TimeBase tb)
  93.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8, 0x7000, 0xA82A);
  94. extern pascal ComponentResult ClockStartStopChanged(ComponentInstance aClock, QTCallBack cb, Boolean startChanged, Boolean stopChanged)
  95.  FIVEWORDINLINE(0x2F3C, 0x8, 0x9, 0x7000, 0xA82A);
  96. extern pascal ComponentResult ClockGetRate(ComponentInstance aClock, Fixed *rate)
  97.  FIVEWORDINLINE(0x2F3C, 0x4, 0xA, 0x7000, 0xA82A);
  98. #ifdef __cplusplus
  99. }
  100. #endif
  101.  
  102. enum  {
  103.     kClockGetTimeSelect            = 0x1,
  104.     kClockNewCallBackSelect        = 0x2,
  105.     kClockDisposeCallBackSelect    = 0x3,
  106.     kClockCallMeWhenSelect        = 0x4,
  107.     kClockCancelCallBackSelect    = 0x5,
  108.     kClockRateChangedSelect        = 0x6,
  109.     kClockTimeChangedSelect        = 0x7,
  110.     kClockSetTimeBaseSelect        = 0x8,
  111.     kClockStartStopChangedSelect = 0x9,
  112.     kClockGetRateSelect            = 0xA
  113. };
  114.  
  115. typedef ComponentInstance SeqGrabComponent;
  116.  
  117. typedef ComponentInstance SGChannel;
  118.  
  119. #define SeqGrabComponentType 'barg'
  120.  
  121. #define SeqGrabChannelType 'sgch'
  122.  
  123. #define SeqGrabPanelType 'sgpn'
  124.  
  125. #define SeqGrabCompressionPanelType 'comp'
  126.  
  127. #define SeqGrabSourcePanelType 'sour'
  128.  
  129. enum  {
  130.     seqGrabToDisk                = 1,
  131.     seqGrabToMemory                = 2,
  132.     seqGrabDontUseTempMemory    = 4,
  133.     seqGrabAppendToFile            = 8,
  134.     seqGrabDontAddMovieResource    = 16,
  135.     seqGrabDontMakeMovie        = 32,
  136.     seqGrabPreExtendFile        = 64,
  137.     seqGrabDataProcIsInterruptSafe = 128,
  138.     seqGrabDataProcDoesOverlappingReads = 256
  139. };
  140.  
  141. typedef unsigned long SeqGrabDataOutputEnum;
  142.  
  143. enum  {
  144.     seqGrabRecord                = 1,
  145.     seqGrabPreview                = 2,
  146.     seqGrabPlayDuringRecord        = 4
  147. };
  148.  
  149. typedef unsigned long SeqGrabUsageEnum;
  150.  
  151. enum  {
  152.     seqGrabHasBounds            = 1,
  153.     seqGrabHasVolume            = 2,
  154.     seqGrabHasDiscreteSamples    = 4
  155. };
  156.  
  157. typedef unsigned long SeqGrabChannelInfoEnum;
  158.  
  159. #if defined(powerc) || defined (__powerc)
  160. #pragma options align=mac68k
  161. #endif
  162. struct seqGrabFrameInfo {
  163.     long                        frameOffset;
  164.     long                        frameTime;
  165.     long                        frameSize;
  166.     SGChannel                    frameChannel;
  167.     long                        frameRefCon;
  168. };
  169. #if defined(powerc) || defined(__powerc)
  170. #pragma options align=reset
  171. #endif
  172.  
  173. typedef struct seqGrabFrameInfo seqGrabFrameInfo;
  174.  
  175. enum  {
  176.     grabPictOffScreen            = 1,
  177.     grabPictIgnoreClip            = 2,
  178.     grabPictCurrentImage        = 4
  179. };
  180.  
  181. #define sgFlagControlledGrab (1)
  182.  
  183. typedef pascal OSErr (*SGDataProcPtr)(SGChannel c, Ptr p, long len, long *offset, long chRefCon, TimeValue time, short writeType, long refCon);
  184.  
  185. enum {
  186.     uppSGDataProcInfo = kPascalStackBased
  187.          | RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
  188.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  189.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Ptr)))
  190.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  191.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long*)))
  192.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  193.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(TimeValue)))
  194.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(short)))
  195.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(long)))
  196. };
  197.  
  198. #if USESROUTINEDESCRIPTORS
  199. typedef UniversalProcPtr SGDataUPP;
  200.  
  201. #define CallSGDataProc(userRoutine, c, p, len, offset, chRefCon, time, writeType, refCon)        \
  202.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGDataProcInfo, (c), (p), (len), (offset), (chRefCon), (time), (writeType), (refCon))
  203. #define NewSGDataProc(userRoutine)        \
  204.         (SGDataUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGDataProcInfo, GetCurrentISA())
  205. #else
  206. typedef SGDataProcPtr SGDataUPP;
  207.  
  208. #define CallSGDataProc(userRoutine, c, p, len, offset, chRefCon, time, writeType, refCon)        \
  209.         (*(userRoutine))((c), (p), (len), (offset), (chRefCon), (time), (writeType), (refCon))
  210. #define NewSGDataProc(userRoutine)        \
  211.         (SGDataUPP)(userRoutine)
  212. #endif
  213.  
  214. #if defined(powerc) || defined (__powerc)
  215. #pragma options align=mac68k
  216. #endif
  217. struct SGDeviceName {
  218.     Str63                        name;
  219.     Handle                        icon;
  220.     long                        flags;
  221.     long                        refCon;
  222.     long                        reserved;
  223. };
  224. #if defined(powerc) || defined(__powerc)
  225. #pragma options align=reset
  226. #endif
  227.  
  228. typedef struct SGDeviceName SGDeviceName;
  229.  
  230. #define sgDeviceNameFlagDeviceUnavailable (1)
  231.  
  232. #if defined(powerc) || defined (__powerc)
  233. #pragma options align=mac68k
  234. #endif
  235. struct SGDeviceListRecord {
  236.     short                        count;
  237.     short                        selectedIndex;
  238.     long                        reserved;
  239.     SGDeviceName                entry[1];
  240. };
  241. #if defined(powerc) || defined(__powerc)
  242. #pragma options align=reset
  243. #endif
  244.  
  245. typedef struct SGDeviceListRecord SGDeviceListRecord;
  246.  
  247. typedef SGDeviceListRecord *SGDeviceListPtr, **SGDeviceList;
  248.  
  249. #define sgDeviceListWithIcons (1)
  250.  
  251. #define sgDeviceListDontCheckAvailability (2)
  252.  
  253. enum  {
  254.     seqGrabWriteAppend,
  255.     seqGrabWriteReserve,
  256.     seqGrabWriteFill
  257. };
  258.  
  259. enum  {
  260.     seqGrabUnpause                = 0,
  261.     seqGrabPause                = 1,
  262.     seqGrabPauseForMenu            = 3
  263. };
  264.  
  265. enum  {
  266.     channelFlagDontOpenResFile    = 2,
  267.     channelFlagHasDependency    = 4
  268. };
  269.  
  270. typedef pascal Boolean (*SGModalFilterProcPtr)(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, long refCon);
  271.  
  272. enum {
  273.     uppSGModalFilterProcInfo = kPascalStackBased
  274.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  275.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  276.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord*)))
  277.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*)))
  278.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
  279. };
  280.  
  281. #if USESROUTINEDESCRIPTORS
  282. typedef UniversalProcPtr SGModalFilterUPP;
  283.  
  284. #define CallSGModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refCon)        \
  285.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGModalFilterProcInfo, (theDialog), (theEvent), (itemHit), (refCon))
  286. #define NewSGModalFilterProc(userRoutine)        \
  287.         (SGModalFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGModalFilterProcInfo, GetCurrentISA())
  288. #else
  289. typedef SGModalFilterProcPtr SGModalFilterUPP;
  290.  
  291. #define CallSGModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refCon)        \
  292.         (*(userRoutine))((theDialog), (theEvent), (itemHit), (refCon))
  293. #define NewSGModalFilterProc(userRoutine)        \
  294.         (SGModalFilterUPP)(userRoutine)
  295. #endif
  296.  
  297. enum  {
  298.     sgPanelFlagForPanel            = 1
  299. };
  300.  
  301. #if defined(powerc) || defined (__powerc)
  302. #pragma options align=mac68k
  303. #endif
  304. struct SGOutputRecord {
  305.     long                        data[1];
  306. };
  307. #if defined(powerc) || defined(__powerc)
  308. #pragma options align=reset
  309. #endif
  310.  
  311. typedef struct SGOutputRecord SGOutputRecord;
  312.  
  313. typedef SGOutputRecord *SGOutput;
  314.  
  315. #define channelPlayNormal 0
  316.  
  317. #define channelPlayFast 1
  318.  
  319. #define channelPlayHighQuality 2
  320.  
  321. #define channelPlayAllData 4
  322.  
  323. #ifdef __cplusplus
  324. extern "C" {
  325. #endif
  326.  
  327. extern pascal ComponentResult SGInitialize(SeqGrabComponent s)
  328.  FIVEWORDINLINE(0x2F3C, 0, 0x1, 0x7000, 0xA82A);
  329. extern pascal ComponentResult SGSetDataOutput(SeqGrabComponent s, FSSpec *movieFile, long whereFlags)
  330.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2, 0x7000, 0xA82A);
  331. extern pascal ComponentResult SGGetDataOutput(SeqGrabComponent s, FSSpec *movieFile, long *whereFlags)
  332.  FIVEWORDINLINE(0x2F3C, 0x8, 0x3, 0x7000, 0xA82A);
  333. extern pascal ComponentResult SGSetGWorld(SeqGrabComponent s, CGrafPtr gp, GDHandle gd)
  334.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  335. extern pascal ComponentResult SGGetGWorld(SeqGrabComponent s, CGrafPtr *gp, GDHandle *gd)
  336.  FIVEWORDINLINE(0x2F3C, 0x8, 0x5, 0x7000, 0xA82A);
  337. extern pascal ComponentResult SGNewChannel(SeqGrabComponent s, OSType channelType, SGChannel *ref)
  338.  FIVEWORDINLINE(0x2F3C, 0x8, 0x6, 0x7000, 0xA82A);
  339. extern pascal ComponentResult SGDisposeChannel(SeqGrabComponent s, SGChannel c)
  340.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  341. extern pascal ComponentResult SGStartPreview(SeqGrabComponent s)
  342.  FIVEWORDINLINE(0x2F3C, 0, 0x10, 0x7000, 0xA82A);
  343. extern pascal ComponentResult SGStartRecord(SeqGrabComponent s)
  344.  FIVEWORDINLINE(0x2F3C, 0, 0x11, 0x7000, 0xA82A);
  345. extern pascal ComponentResult SGIdle(SeqGrabComponent s)
  346.  FIVEWORDINLINE(0x2F3C, 0, 0x12, 0x7000, 0xA82A);
  347. extern pascal ComponentResult SGStop(SeqGrabComponent s)
  348.  FIVEWORDINLINE(0x2F3C, 0, 0x13, 0x7000, 0xA82A);
  349. extern pascal ComponentResult SGPause(SeqGrabComponent s, Byte pause)
  350.  FIVEWORDINLINE(0x2F3C, 0x2, 0x14, 0x7000, 0xA82A);
  351. extern pascal ComponentResult SGPrepare(SeqGrabComponent s, Boolean prepareForPreview, Boolean prepareForRecord)
  352.  FIVEWORDINLINE(0x2F3C, 0x4, 0x15, 0x7000, 0xA82A);
  353. extern pascal ComponentResult SGRelease(SeqGrabComponent s)
  354.  FIVEWORDINLINE(0x2F3C, 0, 0x16, 0x7000, 0xA82A);
  355. extern pascal Movie SGGetMovie(SeqGrabComponent s)
  356.  FIVEWORDINLINE(0x2F3C, 0, 0x17, 0x7000, 0xA82A);
  357. extern pascal ComponentResult SGSetMaximumRecordTime(SeqGrabComponent s, unsigned long ticks)
  358.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  359. extern pascal ComponentResult SGGetMaximumRecordTime(SeqGrabComponent s, unsigned long *ticks)
  360.  FIVEWORDINLINE(0x2F3C, 0x4, 0x19, 0x7000, 0xA82A);
  361. extern pascal ComponentResult SGGetStorageSpaceRemaining(SeqGrabComponent s, unsigned long *bytes)
  362.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1A, 0x7000, 0xA82A);
  363. extern pascal ComponentResult SGGetTimeRemaining(SeqGrabComponent s, long *ticksLeft)
  364.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1B, 0x7000, 0xA82A);
  365. extern pascal ComponentResult SGGrabPict(SeqGrabComponent s, PicHandle *p, const Rect *bounds, short offscreenDepth, long grabPictFlags)
  366.  FIVEWORDINLINE(0x2F3C, 0xE, 0x1C, 0x7000, 0xA82A);
  367. extern pascal ComponentResult SGGetLastMovieResID(SeqGrabComponent s, short *resID)
  368.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1D, 0x7000, 0xA82A);
  369. extern pascal ComponentResult SGSetFlags(SeqGrabComponent s, long sgFlags)
  370.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  371. extern pascal ComponentResult SGGetFlags(SeqGrabComponent s, long *sgFlags)
  372.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1F, 0x7000, 0xA82A);
  373. extern pascal ComponentResult SGSetDataProc(SeqGrabComponent s, SGDataUPP proc, long refCon)
  374.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20, 0x7000, 0xA82A);
  375. extern pascal ComponentResult SGNewChannelFromComponent(SeqGrabComponent s, SGChannel *newChannel, Component sgChannelComponent)
  376.  FIVEWORDINLINE(0x2F3C, 0x8, 0x21, 0x7000, 0xA82A);
  377. extern pascal ComponentResult SGDisposeDeviceList(SeqGrabComponent s, SGDeviceList list)
  378.  FIVEWORDINLINE(0x2F3C, 0x4, 0x22, 0x7000, 0xA82A);
  379. extern pascal ComponentResult SGAppendDeviceListToMenu(SeqGrabComponent s, SGDeviceList list, MenuHandle mh)
  380.  FIVEWORDINLINE(0x2F3C, 0x8, 0x23, 0x7000, 0xA82A);
  381. extern pascal ComponentResult SGSetSettings(SeqGrabComponent s, UserData ud, long flags)
  382.  FIVEWORDINLINE(0x2F3C, 0x8, 0x24, 0x7000, 0xA82A);
  383. extern pascal ComponentResult SGGetSettings(SeqGrabComponent s, UserData *ud, long flags)
  384.  FIVEWORDINLINE(0x2F3C, 0x8, 0x25, 0x7000, 0xA82A);
  385. extern pascal ComponentResult SGGetIndChannel(SeqGrabComponent s, short index, SGChannel *ref, OSType *chanType)
  386.  FIVEWORDINLINE(0x2F3C, 0xA, 0x26, 0x7000, 0xA82A);
  387. extern pascal ComponentResult SGUpdate(SeqGrabComponent s, RgnHandle updateRgn)
  388.  FIVEWORDINLINE(0x2F3C, 0x4, 0x27, 0x7000, 0xA82A);
  389. extern pascal ComponentResult SGGetPause(SeqGrabComponent s, Byte *paused)
  390.  FIVEWORDINLINE(0x2F3C, 0x4, 0x28, 0x7000, 0xA82A);
  391. extern pascal ComponentResult SGSettingsDialog(SeqGrabComponent s, SGChannel c, short numPanels, Component *panelList, long flags, SGModalFilterUPP proc, long procRefNum)
  392.  FIVEWORDINLINE(0x2F3C, 0x16, 0x29, 0x7000, 0xA82A);
  393. extern pascal ComponentResult SGGetAlignmentProc(SeqGrabComponent s, ICMAlignmentProcRecordPtr alignmentProc)
  394.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2A, 0x7000, 0xA82A);
  395. extern pascal ComponentResult SGSetChannelSettings(SeqGrabComponent s, SGChannel c, UserData ud, long flags)
  396.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2B, 0x7000, 0xA82A);
  397. extern pascal ComponentResult SGGetChannelSettings(SeqGrabComponent s, SGChannel c, UserData *ud, long flags)
  398.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2C, 0x7000, 0xA82A);
  399. extern pascal ComponentResult SGGetMode(SeqGrabComponent s, Boolean *previewMode, Boolean *recordMode)
  400.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2D, 0x7000, 0xA82A);
  401. extern pascal ComponentResult SGSetDataRef(SeqGrabComponent s, Handle dataRef, OSType dataRefType, long whereFlags)
  402.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2E, 0x7000, 0xA82A);
  403. extern pascal ComponentResult SGGetDataRef(SeqGrabComponent s, Handle *dataRef, OSType *dataRefType, long *whereFlags)
  404.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2F, 0x7000, 0xA82A);
  405. extern pascal ComponentResult SGNewOutput(SeqGrabComponent s, Handle dataRef, OSType dataRefType, long whereFlags, SGOutput *output)
  406.  FIVEWORDINLINE(0x2F3C, 0x10, 0x30, 0x7000, 0xA82A);
  407. extern pascal ComponentResult SGDisposeOutput(SeqGrabComponent s, SGOutput output)
  408.  FIVEWORDINLINE(0x2F3C, 0x4, 0x31, 0x7000, 0xA82A);
  409. extern pascal ComponentResult SGSetOutputFlags(SeqGrabComponent s, SGOutput output, long whereFlags)
  410.  FIVEWORDINLINE(0x2F3C, 0x8, 0x32, 0x7000, 0xA82A);
  411. extern pascal ComponentResult SGSetChannelOutput(SeqGrabComponent s, SGChannel c, SGOutput output)
  412.  FIVEWORDINLINE(0x2F3C, 0x8, 0x33, 0x7000, 0xA82A);
  413. extern pascal ComponentResult SGGetDataOutputStorageSpaceRemaining(SeqGrabComponent s, SGOutput output, unsigned long *space)
  414.  FIVEWORDINLINE(0x2F3C, 0x8, 0x34, 0x7000, 0xA82A);
  415. extern pascal ComponentResult SGWriteMovieData(SeqGrabComponent s, SGChannel c, Ptr p, long len, long *offset)
  416.  FIVEWORDINLINE(0x2F3C, 0x10, 0x100, 0x7000, 0xA82A);
  417. extern pascal ComponentResult SGAddFrameReference(SeqGrabComponent s, seqGrabFrameInfo *frameInfo)
  418.  FIVEWORDINLINE(0x2F3C, 0x4, 0x101, 0x7000, 0xA82A);
  419. extern pascal ComponentResult SGGetNextFrameReference(SeqGrabComponent s, seqGrabFrameInfo *frameInfo, TimeValue *frameDuration, long *frameNumber)
  420.  FIVEWORDINLINE(0x2F3C, 0xC, 0x102, 0x7000, 0xA82A);
  421. extern pascal ComponentResult SGGetTimeBase(SeqGrabComponent s, TimeBase *tb)
  422.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  423. extern pascal ComponentResult SGSortDeviceList(SeqGrabComponent s, SGDeviceList list)
  424.  FIVEWORDINLINE(0x2F3C, 0x4, 0x104, 0x7000, 0xA82A);
  425. extern pascal ComponentResult SGAddMovieData(SeqGrabComponent s, SGChannel c, Ptr p, long len, long *offset, long chRefCon, TimeValue time, short writeType)
  426.  FIVEWORDINLINE(0x2F3C, 0x1A, 0x105, 0x7000, 0xA82A);
  427. extern pascal ComponentResult SGChangedSource(SeqGrabComponent s, SGChannel c)
  428.  FIVEWORDINLINE(0x2F3C, 0x4, 0x106, 0x7000, 0xA82A);
  429. extern pascal ComponentResult SGSetChannelUsage(SGChannel c, long usage)
  430.  FIVEWORDINLINE(0x2F3C, 0x4, 0x80, 0x7000, 0xA82A);
  431. extern pascal ComponentResult SGGetChannelUsage(SGChannel c, long *usage)
  432.  FIVEWORDINLINE(0x2F3C, 0x4, 0x81, 0x7000, 0xA82A);
  433. extern pascal ComponentResult SGSetChannelBounds(SGChannel c, const Rect *bounds)
  434.  FIVEWORDINLINE(0x2F3C, 0x4, 0x82, 0x7000, 0xA82A);
  435. extern pascal ComponentResult SGGetChannelBounds(SGChannel c, Rect *bounds)
  436.  FIVEWORDINLINE(0x2F3C, 0x4, 0x83, 0x7000, 0xA82A);
  437. extern pascal ComponentResult SGSetChannelVolume(SGChannel c, short volume)
  438.  FIVEWORDINLINE(0x2F3C, 0x2, 0x84, 0x7000, 0xA82A);
  439. extern pascal ComponentResult SGGetChannelVolume(SGChannel c, short *volume)
  440.  FIVEWORDINLINE(0x2F3C, 0x4, 0x85, 0x7000, 0xA82A);
  441. extern pascal ComponentResult SGGetChannelInfo(SGChannel c, long *channelInfo)
  442.  FIVEWORDINLINE(0x2F3C, 0x4, 0x86, 0x7000, 0xA82A);
  443. extern pascal ComponentResult SGSetChannelPlayFlags(SGChannel c, long playFlags)
  444.  FIVEWORDINLINE(0x2F3C, 0x4, 0x87, 0x7000, 0xA82A);
  445. extern pascal ComponentResult SGGetChannelPlayFlags(SGChannel c, long *playFlags)
  446.  FIVEWORDINLINE(0x2F3C, 0x4, 0x88, 0x7000, 0xA82A);
  447. extern pascal ComponentResult SGSetChannelMaxFrames(SGChannel c, long frameCount)
  448.  FIVEWORDINLINE(0x2F3C, 0x4, 0x89, 0x7000, 0xA82A);
  449. extern pascal ComponentResult SGGetChannelMaxFrames(SGChannel c, long *frameCount)
  450.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8A, 0x7000, 0xA82A);
  451. extern pascal ComponentResult SGSetChannelRefCon(SGChannel c, long refCon)
  452.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8B, 0x7000, 0xA82A);
  453. extern pascal ComponentResult SGSetChannelClip(SGChannel c, RgnHandle theClip)
  454.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8C, 0x7000, 0xA82A);
  455. extern pascal ComponentResult SGGetChannelClip(SGChannel c, RgnHandle *theClip)
  456.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8D, 0x7000, 0xA82A);
  457. extern pascal ComponentResult SGGetChannelSampleDescription(SGChannel c, Handle sampleDesc)
  458.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8E, 0x7000, 0xA82A);
  459. extern pascal ComponentResult SGGetChannelDeviceList(SGChannel c, long selectionFlags, SGDeviceList *list)
  460.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8F, 0x7000, 0xA82A);
  461. extern pascal ComponentResult SGSetChannelDevice(SGChannel c, StringPtr name)
  462.  FIVEWORDINLINE(0x2F3C, 0x4, 0x90, 0x7000, 0xA82A);
  463. extern pascal ComponentResult SGSetChannelMatrix(SGChannel c, const MatrixRecord *m)
  464.  FIVEWORDINLINE(0x2F3C, 0x4, 0x91, 0x7000, 0xA82A);
  465. extern pascal ComponentResult SGGetChannelMatrix(SGChannel c, MatrixRecord *m)
  466.  FIVEWORDINLINE(0x2F3C, 0x4, 0x92, 0x7000, 0xA82A);
  467. extern pascal ComponentResult SGGetChannelTimeScale(SGChannel c, TimeScale *scale)
  468.  FIVEWORDINLINE(0x2F3C, 0x4, 0x93, 0x7000, 0xA82A);
  469. extern pascal ComponentResult SGChannelPutPicture(SGChannel c)
  470.  FIVEWORDINLINE(0x2F3C, 0, 0x94, 0x7000, 0xA82A);
  471. extern pascal ComponentResult SGChannelSetRequestedDataRate(SGChannel c, long bytesPerSecond)
  472.  FIVEWORDINLINE(0x2F3C, 0x4, 0x95, 0x7000, 0xA82A);
  473. extern pascal ComponentResult SGChannelGetRequestedDataRate(SGChannel c, long *bytesPerSecond)
  474.  FIVEWORDINLINE(0x2F3C, 0x4, 0x96, 0x7000, 0xA82A);
  475. extern pascal ComponentResult SGChannelSetDataSourceName(SGChannel c, const Str255 name, ScriptCode scriptTag)
  476.  FIVEWORDINLINE(0x2F3C, 0x6, 0x97, 0x7000, 0xA82A);
  477. extern pascal ComponentResult SGChannelGetDataSourceName(SGChannel c, Str255 name, ScriptCode *scriptTag)
  478.  FIVEWORDINLINE(0x2F3C, 0x8, 0x98, 0x7000, 0xA82A);
  479. extern pascal ComponentResult SGInitChannel(SGChannel c, SeqGrabComponent owner)
  480.  FIVEWORDINLINE(0x2F3C, 0x4, 0x180, 0x7000, 0xA82A);
  481. extern pascal ComponentResult SGWriteSamples(SGChannel c, Movie m, AliasHandle theFile)
  482.  FIVEWORDINLINE(0x2F3C, 0x8, 0x181, 0x7000, 0xA82A);
  483. extern pascal ComponentResult SGGetDataRate(SGChannel c, long *bytesPerSecond)
  484.  FIVEWORDINLINE(0x2F3C, 0x4, 0x182, 0x7000, 0xA82A);
  485. extern pascal ComponentResult SGAlignChannelRect(SGChannel c, Rect *r)
  486.  FIVEWORDINLINE(0x2F3C, 0x4, 0x183, 0x7000, 0xA82A);
  487. extern pascal ComponentResult SGPanelGetDitl(SeqGrabComponent s, Handle *ditl)
  488.  FIVEWORDINLINE(0x2F3C, 0x4, 0x200, 0x7000, 0xA82A);
  489. extern pascal ComponentResult SGPanelGetTitle(SeqGrabComponent s, Str255 title)
  490.  FIVEWORDINLINE(0x2F3C, 0x4, 0x201, 0x7000, 0xA82A);
  491. extern pascal ComponentResult SGPanelCanRun(SeqGrabComponent s, SGChannel c)
  492.  FIVEWORDINLINE(0x2F3C, 0x4, 0x202, 0x7000, 0xA82A);
  493. extern pascal ComponentResult SGPanelInstall(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset)
  494.  FIVEWORDINLINE(0x2F3C, 0xA, 0x203, 0x7000, 0xA82A);
  495. extern pascal ComponentResult SGPanelEvent(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset, EventRecord *theEvent, short *itemHit, Boolean *handled)
  496.  FIVEWORDINLINE(0x2F3C, 0x16, 0x204, 0x7000, 0xA82A);
  497. extern pascal ComponentResult SGPanelItem(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset, short itemNum)
  498.  FIVEWORDINLINE(0x2F3C, 0xC, 0x205, 0x7000, 0xA82A);
  499. extern pascal ComponentResult SGPanelRemove(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset)
  500.  FIVEWORDINLINE(0x2F3C, 0xA, 0x206, 0x7000, 0xA82A);
  501. extern pascal ComponentResult SGPanelSetGrabber(SeqGrabComponent s, SeqGrabComponent sg)
  502.  FIVEWORDINLINE(0x2F3C, 0x4, 0x207, 0x7000, 0xA82A);
  503. extern pascal ComponentResult SGPanelSetResFile(SeqGrabComponent s, short resRef)
  504.  FIVEWORDINLINE(0x2F3C, 0x2, 0x208, 0x7000, 0xA82A);
  505. extern pascal ComponentResult SGPanelGetSettings(SeqGrabComponent s, SGChannel c, UserData *ud, long flags)
  506.  FIVEWORDINLINE(0x2F3C, 0xC, 0x209, 0x7000, 0xA82A);
  507. extern pascal ComponentResult SGPanelSetSettings(SeqGrabComponent s, SGChannel c, UserData ud, long flags)
  508.  FIVEWORDINLINE(0x2F3C, 0xC, 0x20A, 0x7000, 0xA82A);
  509. extern pascal ComponentResult SGPanelValidateInput(SeqGrabComponent s, Boolean *ok)
  510.  FIVEWORDINLINE(0x2F3C, 0x4, 0x20B, 0x7000, 0xA82A);
  511. extern pascal ComponentResult SGPanelSetEventFilter(SeqGrabComponent s, SGModalFilterUPP proc, long refCon)
  512.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20C, 0x7000, 0xA82A);
  513. #ifdef __cplusplus
  514. }
  515. #endif
  516.  
  517. #if defined(powerc) || defined (__powerc)
  518. #pragma options align=mac68k
  519. #endif
  520. struct SGCompressInfo {
  521.     Ptr                            buffer;
  522.     unsigned long                bufferSize;
  523.     unsigned char                similarity;
  524.     unsigned char                reserved;
  525. };
  526. #if defined(powerc) || defined(__powerc)
  527. #pragma options align=reset
  528. #endif
  529.  
  530. typedef struct SGCompressInfo SGCompressInfo;
  531.  
  532. typedef pascal ComponentResult (*SGGrabProcPtr)(SGChannel c, short bufferNum, long refCon);
  533.  
  534. enum {
  535.     uppSGGrabProcInfo = kPascalStackBased
  536.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  537.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  538.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  539.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  540. };
  541.  
  542. #if USESROUTINEDESCRIPTORS
  543. typedef UniversalProcPtr SGGrabUPP;
  544.  
  545. #define CallSGGrabProc(userRoutine, c, bufferNum, refCon)        \
  546.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGGrabProcInfo, (c), (bufferNum), (refCon))
  547. #define NewSGGrabProc(userRoutine)        \
  548.         (SGGrabUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGGrabProcInfo, GetCurrentISA())
  549. #else
  550. typedef SGGrabProcPtr SGGrabUPP;
  551.  
  552. #define CallSGGrabProc(userRoutine, c, bufferNum, refCon)        \
  553.         (*(userRoutine))((c), (bufferNum), (refCon))
  554. #define NewSGGrabProc(userRoutine)        \
  555.         (SGGrabUPP)(userRoutine)
  556. #endif
  557.  
  558. typedef pascal ComponentResult (*SGGrabCompleteProcPtr)(SGChannel c, short bufferNum, Boolean *done, long refCon);
  559.  
  560. enum {
  561.     uppSGGrabCompleteProcInfo = kPascalStackBased
  562.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  563.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  564.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  565.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean*)))
  566.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
  567. };
  568.  
  569. #if USESROUTINEDESCRIPTORS
  570. typedef UniversalProcPtr SGGrabCompleteUPP;
  571.  
  572. #define CallSGGrabCompleteProc(userRoutine, c, bufferNum, done, refCon)        \
  573.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGGrabCompleteProcInfo, (c), (bufferNum), (done), (refCon))
  574. #define NewSGGrabCompleteProc(userRoutine)        \
  575.         (SGGrabCompleteUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGGrabCompleteProcInfo, GetCurrentISA())
  576. #else
  577. typedef SGGrabCompleteProcPtr SGGrabCompleteUPP;
  578.  
  579. #define CallSGGrabCompleteProc(userRoutine, c, bufferNum, done, refCon)        \
  580.         (*(userRoutine))((c), (bufferNum), (done), (refCon))
  581. #define NewSGGrabCompleteProc(userRoutine)        \
  582.         (SGGrabCompleteUPP)(userRoutine)
  583. #endif
  584.  
  585. typedef pascal ComponentResult (*SGDisplayProcPtr)(SGChannel c, short bufferNum, MatrixRecord *mp, RgnHandle clipRgn, long refCon);
  586.  
  587. enum {
  588.     uppSGDisplayProcInfo = kPascalStackBased
  589.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  590.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  591.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  592.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(MatrixRecord*)))
  593.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(RgnHandle)))
  594.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  595. };
  596.  
  597. #if USESROUTINEDESCRIPTORS
  598. typedef UniversalProcPtr SGDisplayUPP;
  599.  
  600. #define CallSGDisplayProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  601.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGDisplayProcInfo, (c), (bufferNum), (mp), (clipRgn), (refCon))
  602. #define NewSGDisplayProc(userRoutine)        \
  603.         (SGDisplayUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGDisplayProcInfo, GetCurrentISA())
  604. #else
  605. typedef SGDisplayProcPtr SGDisplayUPP;
  606.  
  607. #define CallSGDisplayProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  608.         (*(userRoutine))((c), (bufferNum), (mp), (clipRgn), (refCon))
  609. #define NewSGDisplayProc(userRoutine)        \
  610.         (SGDisplayUPP)(userRoutine)
  611. #endif
  612.  
  613. typedef pascal ComponentResult (*SGCompressProcPtr)(SGChannel c, short bufferNum, long refCon);
  614.  
  615. enum {
  616.     uppSGCompressProcInfo = kPascalStackBased
  617.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  618.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  619.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  620.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  621. };
  622.  
  623. #if USESROUTINEDESCRIPTORS
  624. typedef UniversalProcPtr SGCompressUPP;
  625.  
  626. #define CallSGCompressProc(userRoutine, c, bufferNum, refCon)        \
  627.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGCompressProcInfo, (c), (bufferNum), (refCon))
  628. #define NewSGCompressProc(userRoutine)        \
  629.         (SGCompressUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGCompressProcInfo, GetCurrentISA())
  630. #else
  631. typedef SGCompressProcPtr SGCompressUPP;
  632.  
  633. #define CallSGCompressProc(userRoutine, c, bufferNum, refCon)        \
  634.         (*(userRoutine))((c), (bufferNum), (refCon))
  635. #define NewSGCompressProc(userRoutine)        \
  636.         (SGCompressUPP)(userRoutine)
  637. #endif
  638.  
  639. typedef pascal ComponentResult (*SGCompressCompleteProcPtr)(SGChannel c, short bufferNum, Boolean *done, SGCompressInfo *ci, long refCon);
  640.  
  641. enum {
  642.     uppSGCompressCompleteProcInfo = kPascalStackBased
  643.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  644.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  645.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  646.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean*)))
  647.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(SGCompressInfo*)))
  648.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  649. };
  650.  
  651. #if USESROUTINEDESCRIPTORS
  652. typedef UniversalProcPtr SGCompressCompleteUPP;
  653.  
  654. #define CallSGCompressCompleteProc(userRoutine, c, bufferNum, done, ci, refCon)        \
  655.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGCompressCompleteProcInfo, (c), (bufferNum), (done), (ci), (refCon))
  656. #define NewSGCompressCompleteProc(userRoutine)        \
  657.         (SGCompressCompleteUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGCompressCompleteProcInfo, GetCurrentISA())
  658. #else
  659. typedef SGCompressCompleteProcPtr SGCompressCompleteUPP;
  660.  
  661. #define CallSGCompressCompleteProc(userRoutine, c, bufferNum, done, ci, refCon)        \
  662.         (*(userRoutine))((c), (bufferNum), (done), (ci), (refCon))
  663. #define NewSGCompressCompleteProc(userRoutine)        \
  664.         (SGCompressCompleteUPP)(userRoutine)
  665. #endif
  666.  
  667. typedef pascal ComponentResult (*SGAddFrameProcPtr)(SGChannel c, short bufferNum, TimeValue atTime, TimeScale scale, const SGCompressInfo *ci, long refCon);
  668.  
  669. enum {
  670.     uppSGAddFrameProcInfo = kPascalStackBased
  671.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  672.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  673.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  674.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(TimeValue)))
  675.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TimeScale)))
  676.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(SGCompressInfo*)))
  677.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(long)))
  678. };
  679.  
  680. #if USESROUTINEDESCRIPTORS
  681. typedef UniversalProcPtr SGAddFrameUPP;
  682.  
  683. #define CallSGAddFrameProc(userRoutine, c, bufferNum, atTime, scale, ci, refCon)        \
  684.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGAddFrameProcInfo, (c), (bufferNum), (atTime), (scale), (ci), (refCon))
  685. #define NewSGAddFrameProc(userRoutine)        \
  686.         (SGAddFrameUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGAddFrameProcInfo, GetCurrentISA())
  687. #else
  688. typedef SGAddFrameProcPtr SGAddFrameUPP;
  689.  
  690. #define CallSGAddFrameProc(userRoutine, c, bufferNum, atTime, scale, ci, refCon)        \
  691.         (*(userRoutine))((c), (bufferNum), (atTime), (scale), (ci), (refCon))
  692. #define NewSGAddFrameProc(userRoutine)        \
  693.         (SGAddFrameUPP)(userRoutine)
  694. #endif
  695.  
  696. typedef pascal ComponentResult (*SGTransferFrameProcPtr)(SGChannel c, short bufferNum, MatrixRecord *mp, RgnHandle clipRgn, long refCon);
  697.  
  698. enum {
  699.     uppSGTransferFrameProcInfo = kPascalStackBased
  700.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  701.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  702.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  703.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(MatrixRecord*)))
  704.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(RgnHandle)))
  705.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  706. };
  707.  
  708. #if USESROUTINEDESCRIPTORS
  709. typedef UniversalProcPtr SGTransferFrameUPP;
  710.  
  711. #define CallSGTransferFrameProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  712.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGTransferFrameProcInfo, (c), (bufferNum), (mp), (clipRgn), (refCon))
  713. #define NewSGTransferFrameProc(userRoutine)        \
  714.         (SGTransferFrameUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGTransferFrameProcInfo, GetCurrentISA())
  715. #else
  716. typedef SGTransferFrameProcPtr SGTransferFrameUPP;
  717.  
  718. #define CallSGTransferFrameProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  719.         (*(userRoutine))((c), (bufferNum), (mp), (clipRgn), (refCon))
  720. #define NewSGTransferFrameProc(userRoutine)        \
  721.         (SGTransferFrameUPP)(userRoutine)
  722. #endif
  723.  
  724. typedef pascal ComponentResult (*SGGrabCompressCompleteProcPtr)(SGChannel c, Boolean *done, SGCompressInfo *ci, TimeRecord *t, long refCon);
  725.  
  726. enum {
  727.     uppSGGrabCompressCompleteProcInfo = kPascalStackBased
  728.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  729.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  730.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean*)))
  731.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(SGCompressInfo*)))
  732.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TimeRecord*)))
  733.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  734. };
  735.  
  736. #if USESROUTINEDESCRIPTORS
  737. typedef UniversalProcPtr SGGrabCompressCompleteUPP;
  738.  
  739. #define CallSGGrabCompressCompleteProc(userRoutine, c, done, ci, t, refCon)        \
  740.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGGrabCompressCompleteProcInfo, (c), (done), (ci), (t), (refCon))
  741. #define NewSGGrabCompressCompleteProc(userRoutine)        \
  742.         (SGGrabCompressCompleteUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGGrabCompressCompleteProcInfo, GetCurrentISA())
  743. #else
  744. typedef SGGrabCompressCompleteProcPtr SGGrabCompressCompleteUPP;
  745.  
  746. #define CallSGGrabCompressCompleteProc(userRoutine, c, done, ci, t, refCon)        \
  747.         (*(userRoutine))((c), (done), (ci), (t), (refCon))
  748. #define NewSGGrabCompressCompleteProc(userRoutine)        \
  749.         (SGGrabCompressCompleteUPP)(userRoutine)
  750. #endif
  751.  
  752. typedef pascal ComponentResult (*SGDisplayCompressProcPtr)(SGChannel c, Ptr dataPtr, ImageDescriptionHandle desc, MatrixRecord *mp, RgnHandle clipRgn, long refCon);
  753.  
  754. enum {
  755.     uppSGDisplayCompressProcInfo = kPascalStackBased
  756.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  757.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  758.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Ptr)))
  759.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ImageDescriptionHandle)))
  760.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(MatrixRecord*)))
  761.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(RgnHandle)))
  762.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(long)))
  763. };
  764.  
  765. #if USESROUTINEDESCRIPTORS
  766. typedef UniversalProcPtr SGDisplayCompressUPP;
  767.  
  768. #define CallSGDisplayCompressProc(userRoutine, c, dataPtr, desc, mp, clipRgn, refCon)        \
  769.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGDisplayCompressProcInfo, (c), (dataPtr), (desc), (mp), (clipRgn), (refCon))
  770. #define NewSGDisplayCompressProc(userRoutine)        \
  771.         (SGDisplayCompressUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGDisplayCompressProcInfo, GetCurrentISA())
  772. #else
  773. typedef SGDisplayCompressProcPtr SGDisplayCompressUPP;
  774.  
  775. #define CallSGDisplayCompressProc(userRoutine, c, dataPtr, desc, mp, clipRgn, refCon)        \
  776.         (*(userRoutine))((c), (dataPtr), (desc), (mp), (clipRgn), (refCon))
  777. #define NewSGDisplayCompressProc(userRoutine)        \
  778.         (SGDisplayCompressUPP)(userRoutine)
  779. #endif
  780.  
  781. #if defined(powerc) || defined (__powerc)
  782. #pragma options align=mac68k
  783. #endif
  784. struct VideoBottles {
  785.     short                        procCount;
  786.     SGGrabUPP                    grabProc;
  787.     SGGrabCompleteUPP            grabCompleteProc;
  788.     SGDisplayUPP                displayProc;
  789.     SGCompressUPP                compressProc;
  790.     SGCompressCompleteUPP        compressCompleteProc;
  791.     SGAddFrameUPP                addFrameProc;
  792.     SGTransferFrameUPP            transferFrameProc;
  793.     SGGrabCompressCompleteUPP    grabCompressCompleteProc;
  794.     SGDisplayCompressUPP        displayCompressProc;
  795. };
  796. #if defined(powerc) || defined(__powerc)
  797. #pragma options align=reset
  798. #endif
  799.  
  800. typedef struct VideoBottles VideoBottles;
  801.  
  802. #ifdef __cplusplus
  803. extern "C" {
  804. #endif
  805.  
  806. extern pascal ComponentResult SGGetSrcVideoBounds(SGChannel c, Rect *r)
  807.  FIVEWORDINLINE(0x2F3C, 0x4, 0x100, 0x7000, 0xA82A);
  808. extern pascal ComponentResult SGSetVideoRect(SGChannel c, Rect *r)
  809.  FIVEWORDINLINE(0x2F3C, 0x4, 0x101, 0x7000, 0xA82A);
  810. extern pascal ComponentResult SGGetVideoRect(SGChannel c, Rect *r)
  811.  FIVEWORDINLINE(0x2F3C, 0x4, 0x102, 0x7000, 0xA82A);
  812. extern pascal ComponentResult SGGetVideoCompressorType(SGChannel c, OSType *compressorType)
  813.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  814. extern pascal ComponentResult SGSetVideoCompressorType(SGChannel c, OSType compressorType)
  815.  FIVEWORDINLINE(0x2F3C, 0x4, 0x104, 0x7000, 0xA82A);
  816. extern pascal ComponentResult SGSetVideoCompressor(SGChannel c, short depth, CompressorComponent compressor, CodecQ spatialQuality, CodecQ temporalQuality, long keyFrameRate)
  817.  FIVEWORDINLINE(0x2F3C, 0x12, 0x105, 0x7000, 0xA82A);
  818. extern pascal ComponentResult SGGetVideoCompressor(SGChannel c, short *depth, CompressorComponent *compressor, CodecQ *spatialQuality, CodecQ *temporalQuality, long *keyFrameRate)
  819.  FIVEWORDINLINE(0x2F3C, 0x14, 0x106, 0x7000, 0xA82A);
  820. extern pascal ComponentInstance SGGetVideoDigitizerComponent(SGChannel c)
  821.  FIVEWORDINLINE(0x2F3C, 0, 0x107, 0x7000, 0xA82A);
  822. extern pascal ComponentResult SGSetVideoDigitizerComponent(SGChannel c, ComponentInstance vdig)
  823.  FIVEWORDINLINE(0x2F3C, 0x4, 0x108, 0x7000, 0xA82A);
  824. extern pascal ComponentResult SGVideoDigitizerChanged(SGChannel c)
  825.  FIVEWORDINLINE(0x2F3C, 0, 0x109, 0x7000, 0xA82A);
  826. extern pascal ComponentResult SGSetVideoBottlenecks(SGChannel c, VideoBottles *vb)
  827.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10A, 0x7000, 0xA82A);
  828. extern pascal ComponentResult SGGetVideoBottlenecks(SGChannel c, VideoBottles *vb)
  829.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10B, 0x7000, 0xA82A);
  830. extern pascal ComponentResult SGGrabFrame(SGChannel c, short bufferNum)
  831.  FIVEWORDINLINE(0x2F3C, 0x2, 0x10C, 0x7000, 0xA82A);
  832. extern pascal ComponentResult SGGrabFrameComplete(SGChannel c, short bufferNum, Boolean *done)
  833.  FIVEWORDINLINE(0x2F3C, 0x6, 0x10D, 0x7000, 0xA82A);
  834. extern pascal ComponentResult SGDisplayFrame(SGChannel c, short bufferNum, MatrixRecord *mp, RgnHandle clipRgn)
  835.  FIVEWORDINLINE(0x2F3C, 0xA, 0x10E, 0x7000, 0xA82A);
  836. extern pascal ComponentResult SGCompressFrame(SGChannel c, short bufferNum)
  837.  FIVEWORDINLINE(0x2F3C, 0x2, 0x10F, 0x7000, 0xA82A);
  838. extern pascal ComponentResult SGCompressFrameComplete(SGChannel c, short bufferNum, Boolean *done, SGCompressInfo *ci)
  839.  FIVEWORDINLINE(0x2F3C, 0xA, 0x110, 0x7000, 0xA82A);
  840. extern pascal ComponentResult SGAddFrame(SGChannel c, short bufferNum, TimeValue atTime, TimeScale scale, const SGCompressInfo *ci)
  841.  FIVEWORDINLINE(0x2F3C, 0xE, 0x111, 0x7000, 0xA82A);
  842. extern pascal ComponentResult SGTransferFrameForCompress(SGChannel c, short bufferNum, MatrixRecord *mp, RgnHandle clipRgn)
  843.  FIVEWORDINLINE(0x2F3C, 0xA, 0x112, 0x7000, 0xA82A);
  844. extern pascal ComponentResult SGSetCompressBuffer(SGChannel c, short depth, const Rect *compressSize)
  845.  FIVEWORDINLINE(0x2F3C, 0x6, 0x113, 0x7000, 0xA82A);
  846. extern pascal ComponentResult SGGetCompressBuffer(SGChannel c, short *depth, Rect *compressSize)
  847.  FIVEWORDINLINE(0x2F3C, 0x8, 0x114, 0x7000, 0xA82A);
  848. extern pascal ComponentResult SGGetBufferInfo(SGChannel c, short bufferNum, PixMapHandle *bufferPM, Rect *bufferRect, GWorldPtr *compressBuffer, Rect *compressBufferRect)
  849.  FIVEWORDINLINE(0x2F3C, 0x12, 0x115, 0x7000, 0xA82A);
  850. extern pascal ComponentResult SGSetUseScreenBuffer(SGChannel c, Boolean useScreenBuffer)
  851.  FIVEWORDINLINE(0x2F3C, 0x2, 0x116, 0x7000, 0xA82A);
  852. extern pascal ComponentResult SGGetUseScreenBuffer(SGChannel c, Boolean *useScreenBuffer)
  853.  FIVEWORDINLINE(0x2F3C, 0x4, 0x117, 0x7000, 0xA82A);
  854. extern pascal ComponentResult SGGrabCompressComplete(SGChannel c, Boolean *done, SGCompressInfo *ci, TimeRecord *tr)
  855.  FIVEWORDINLINE(0x2F3C, 0xC, 0x118, 0x7000, 0xA82A);
  856. extern pascal ComponentResult SGDisplayCompress(SGChannel c, Ptr dataPtr, ImageDescriptionHandle desc, MatrixRecord *mp, RgnHandle clipRgn)
  857.  FIVEWORDINLINE(0x2F3C, 0x10, 0x119, 0x7000, 0xA82A);
  858. extern pascal ComponentResult SGSetFrameRate(SGChannel c, Fixed frameRate)
  859.  FIVEWORDINLINE(0x2F3C, 0x4, 0x11A, 0x7000, 0xA82A);
  860. extern pascal ComponentResult SGGetFrameRate(SGChannel c, Fixed *frameRate)
  861.  FIVEWORDINLINE(0x2F3C, 0x4, 0x11B, 0x7000, 0xA82A);
  862. #ifdef __cplusplus
  863. }
  864. #endif
  865.  
  866. #ifdef __cplusplus
  867. extern "C" {
  868. #endif
  869.  
  870. extern pascal ComponentResult SGSetSoundInputDriver(SGChannel c, const Str255 driverName)
  871.  FIVEWORDINLINE(0x2F3C, 0x4, 0x100, 0x7000, 0xA82A);
  872. extern pascal long SGGetSoundInputDriver(SGChannel c)
  873.  FIVEWORDINLINE(0x2F3C, 0, 0x101, 0x7000, 0xA82A);
  874. extern pascal ComponentResult SGSoundInputDriverChanged(SGChannel c)
  875.  FIVEWORDINLINE(0x2F3C, 0, 0x102, 0x7000, 0xA82A);
  876. extern pascal ComponentResult SGSetSoundRecordChunkSize(SGChannel c, long seconds)
  877.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  878. extern pascal long SGGetSoundRecordChunkSize(SGChannel c)
  879.  FIVEWORDINLINE(0x2F3C, 0, 0x104, 0x7000, 0xA82A);
  880. extern pascal ComponentResult SGSetSoundInputRate(SGChannel c, Fixed rate)
  881.  FIVEWORDINLINE(0x2F3C, 0x4, 0x105, 0x7000, 0xA82A);
  882. extern pascal Fixed SGGetSoundInputRate(SGChannel c)
  883.  FIVEWORDINLINE(0x2F3C, 0, 0x106, 0x7000, 0xA82A);
  884. extern pascal ComponentResult SGSetSoundInputParameters(SGChannel c, short sampleSize, short numChannels, OSType compressionType)
  885.  FIVEWORDINLINE(0x2F3C, 0x8, 0x107, 0x7000, 0xA82A);
  886. extern pascal ComponentResult SGGetSoundInputParameters(SGChannel c, short *sampleSize, short *numChannels, OSType *compressionType)
  887.  FIVEWORDINLINE(0x2F3C, 0xC, 0x108, 0x7000, 0xA82A);
  888. #ifdef __cplusplus
  889. }
  890. #endif
  891.  
  892. #define sgChannelAtom 'chan'
  893.  
  894. #define sgChannelSettingsAtom 'ctom'
  895.  
  896. #define sgChannelDescription 'cdsc'
  897.  
  898. #define sgChannelSettings 'cset'
  899.  
  900. #define sgDeviceNameType 'name'
  901.  
  902. #define sgUsageType 'use '
  903.  
  904. #define sgPlayFlagsType 'plyf'
  905.  
  906. #define sgClipType 'clip'
  907.  
  908. #define sgMatrixType 'mtrx'
  909.  
  910. #define sgVolumeType 'volu'
  911.  
  912. #define sgPanelSettingsAtom 'ptom'
  913.  
  914. #define sgPanelDescription 'pdsc'
  915.  
  916. #define sgPanelSettings 'pset'
  917.  
  918. #define sgcSoundCompressionType 'scmp'
  919.  
  920. #define sgcSoundSampleRateType 'srat'
  921.  
  922. #define sgcSoundChannelCountType 'schn'
  923.  
  924. #define sgcSoundSampleSizeType 'ssiz'
  925.  
  926. #define sgcSoundInputType 'sinp'
  927.  
  928. #define sgcSoundGainType 'gain'
  929.  
  930. #define sgcVideoHueType 'hue '
  931.  
  932. #define sgcVideoSaturationType 'satr'
  933.  
  934. #define sgcVideoContrastType 'trst'
  935.  
  936. #define sgcVideoSharpnessType 'shrp'
  937.  
  938. #define sgcVideoBrigtnessType 'brit'
  939.  
  940. #define sgcVideoBlackLevelType 'blkl'
  941.  
  942. #define sgcVideoWhiteLevelType 'whtl'
  943.  
  944. #define sgcVideoInputType 'vinp'
  945.  
  946. #define sgcVideoFormatType 'vstd'
  947.  
  948. #define sgcVideoFilterType 'vflt'
  949.  
  950. #define sgcVideoRectType 'vrct'
  951.  
  952. #define sgVideoDigitizerType 'vdig'
  953.  
  954. enum  {
  955.     kSGInitializeSelect            = 0x1,
  956.     kSGSetDataOutputSelect        = 0x2,
  957.     kSGGetDataOutputSelect        = 0x3,
  958.     kSGSetGWorldSelect            = 0x4,
  959.     kSGGetGWorldSelect            = 0x5,
  960.     kSGNewChannelSelect            = 0x6,
  961.     kSGDisposeChannelSelect        = 0x7,
  962.     kSGStartPreviewSelect        = 0x10,
  963.     kSGStartRecordSelect        = 0x11,
  964.     kSGIdleSelect                = 0x12,
  965.     kSGStopSelect                = 0x13,
  966.     kSGPauseSelect                = 0x14,
  967.     kSGPrepareSelect            = 0x15,
  968.     kSGReleaseSelect            = 0x16,
  969.     kSGGetMovieSelect            = 0x17,
  970.     kSGSetMaximumRecordTimeSelect = 0x18,
  971.     kSGGetMaximumRecordTimeSelect = 0x19,
  972.     kSGGetStorageSpaceRemainingSelect = 0x1A,
  973.     kSGGetTimeRemainingSelect    = 0x1B,
  974.     kSGGrabPictSelect            = 0x1C,
  975.     kSGGetLastMovieResIDSelect    = 0x1D,
  976.     kSGSetFlagsSelect            = 0x1E,
  977.     kSGGetFlagsSelect            = 0x1F,
  978.     kSGSetDataProcSelect        = 0x20,
  979.     kSGNewChannelFromComponentSelect = 0x21,
  980.     kSGDisposeDeviceListSelect    = 0x22,
  981.     kSGAppendDeviceListToMenuSelect = 0x23,
  982.     kSGSetSettingsSelect        = 0x24,
  983.     kSGGetSettingsSelect        = 0x25,
  984.     kSGGetIndChannelSelect        = 0x26,
  985.     kSGUpdateSelect                = 0x27,
  986.     kSGGetPauseSelect            = 0x28,
  987.     kSGSettingsDialogSelect        = 0x29,
  988.     kSGGetAlignmentProcSelect    = 0x2A,
  989.     kSGSetChannelSettingsSelect    = 0x2B,
  990.     kSGGetChannelSettingsSelect    = 0x2C,
  991.     kSGGetModeSelect            = 0x2D,
  992.     kSGSetDataRefSelect            = 0x2E,
  993.     kSGGetDataRefSelect            = 0x2F,
  994.     kSGNewOutputSelect            = 0x30,
  995.     kSGDisposeOutputSelect        = 0x31,
  996.     kSGSetOutputFlagsSelect        = 0x32,
  997.     kSGSetChannelOutputSelect    = 0x33,
  998.     kSGGetDataOutputStorageSpaceRemainingSelect = 0x34,
  999.     kSGWriteMovieDataSelect        = 0x100,
  1000.     kSGAddFrameReferenceSelect    = 0x101,
  1001.     kSGGetNextFrameReferenceSelect = 0x102,
  1002.     kSGGetTimeBaseSelect        = 0x103,
  1003.     kSGSortDeviceListSelect        = 0x104,
  1004.     kSGAddMovieDataSelect        = 0x105,
  1005.     kSGChangedSourceSelect        = 0x106,
  1006.     kSGCSetChannelUsageSelect    = 0x80,
  1007.     kSGCGetChannelUsageSelect    = 0x81,
  1008.     kSGCSetChannelBoundsSelect    = 0x82,
  1009.     kSGCGetChannelBoundsSelect    = 0x83,
  1010.     kSGCSetChannelVolumeSelect    = 0x84,
  1011.     kSGCGetChannelVolumeSelect    = 0x85,
  1012.     kSGCGetChannelInfoSelect    = 0x86,
  1013.     kSGCSetChannelPlayFlagsSelect = 0x87,
  1014.     kSGCGetChannelPlayFlagsSelect = 0x88,
  1015.     kSGCSetChannelMaxFramesSelect = 0x89,
  1016.     kSGCGetChannelMaxFramesSelect = 0x8A,
  1017.     kSGCSetChannelRefConSelect    = 0x8B,
  1018.     kSGCSetChannelClipSelect    = 0x8C,
  1019.     kSGCGetChannelClipSelect    = 0x8D,
  1020.     kSGCGetChannelSampleDescriptionSelect = 0x8E,
  1021.     kSGCGetChannelDeviceListSelect = 0x8F,
  1022.     kSGCSetChannelDeviceSelect    = 0x90,
  1023.     kSGCSetChannelMatrixSelect    = 0x91,
  1024.     kSGCGetChannelMatrixSelect    = 0x92,
  1025.     kSGCGetChannelTimeScaleSelect = 0x93,
  1026.     kSGCChannelPutPictureSelect    = 0x94,
  1027.     kSGCChannelSetRequestedDataRateSelect = 0x95,
  1028.     kSGCChannelGetRequestedDataRateSelect = 0x96,
  1029.     kSGCChannelSetDataSourceNameSelect = 0x97,
  1030.     kSGCChannelGetDataSourceNameSelect = 0x98,
  1031.     kSGCInitChannelSelect        = 0x180,
  1032.     kSGCWriteSamplesSelect        = 0x181,
  1033.     kSGCGetDataRateSelect        = 0x182,
  1034.     kSGCAlignChannelRectSelect    = 0x183,
  1035.     kSGCPanelGetDitlSelect        = 0x200,
  1036.     kSGCPanelGetTitleSelect        = 0x201,
  1037.     kSGCPanelCanRunSelect        = 0x202,
  1038.     kSGCPanelInstallSelect        = 0x203,
  1039.     kSGCPanelEventSelect        = 0x204,
  1040.     kSGCPanelItemSelect            = 0x205,
  1041.     kSGCPanelRemoveSelect        = 0x206,
  1042.     kSGCPanelSetGrabberSelect    = 0x207,
  1043.     kSGCPanelSetResFileSelect    = 0x208,
  1044.     kSGCPanelGetSettingsSelect    = 0x209,
  1045.     kSGCPanelSetSettingsSelect    = 0x20A,
  1046.     kSGCPanelValidateInputSelect = 0x20B,
  1047.     kSGCPanelSetEventFilterSelect = 0x20C,
  1048.     kSGCGetSrcVideoBoundsSelect    = 0x100,
  1049.     kSGCSetVideoRectSelect        = 0x101,
  1050.     kSGCGetVideoRectSelect        = 0x102,
  1051.     kSGCGetVideoCompressorTypeSelect = 0x103,
  1052.     kSGCSetVideoCompressorTypeSelect = 0x104,
  1053.     kSGCSetVideoCompressorSelect = 0x105,
  1054.     kSGCGetVideoCompressorSelect = 0x106,
  1055.     kSGCGetVideoDigitizerComponentSelect = 0x107,
  1056.     kSGCSetVideoDigitizerComponentSelect = 0x108,
  1057.     kSGCVideoDigitizerChangedSelect = 0x109,
  1058.     kSGCSetVideoBottlenecksSelect = 0x10A,
  1059.     kSGCGetVideoBottlenecksSelect = 0x10B,
  1060.     kSGCGrabFrameSelect            = 0x10C,
  1061.     kSGCGrabFrameCompleteSelect    = 0x10D,
  1062.     kSGCDisplayFrameSelect        = 0x10E,
  1063.     kSGCCompressFrameSelect        = 0x10F,
  1064.     kSGCCompressFrameCompleteSelect = 0x110,
  1065.     kSGCAddFrameSelect            = 0x111,
  1066.     kSGCTransferFrameForCompressSelect = 0x112,
  1067.     kSGCSetCompressBufferSelect    = 0x113,
  1068.     kSGCGetCompressBufferSelect    = 0x114,
  1069.     kSGCGetBufferInfoSelect        = 0x115,
  1070.     kSGCSetUseScreenBufferSelect = 0x116,
  1071.     kSGCGetUseScreenBufferSelect = 0x117,
  1072.     kSGCGrabCompressCompleteSelect = 0x118,
  1073.     kSGCDisplayCompressSelect    = 0x119,
  1074.     kSGCSetFrameRateSelect        = 0x11A,
  1075.     kSGCGetFrameRateSelect        = 0x11B,
  1076.     kSGCSetSoundInputDriverSelect = 0x100,
  1077.     kSGCGetSoundInputDriverSelect = 0x101,
  1078.     kSGCSoundInputDriverChangedSelect = 0x102,
  1079.     kSGCSetSoundRecordChunkSizeSelect = 0x103,
  1080.     kSGCGetSoundRecordChunkSizeSelect = 0x104,
  1081.     kSGCSetSoundInputRateSelect    = 0x105,
  1082.     kSGCGetSoundInputRateSelect    = 0x106,
  1083.     kSGCSetSoundInputParametersSelect = 0x107,
  1084.     kSGCGetSoundInputParametersSelect = 0x108
  1085. };
  1086.  
  1087. #define videoDigitizerComponentType 'vdig'
  1088.  
  1089. #define vdigInterfaceRev 2L
  1090.  
  1091. #define ntscIn 0
  1092.  
  1093. #define currentIn 0
  1094.  
  1095. #define palIn 1
  1096.  
  1097. #define secamIn 2
  1098.  
  1099. #define ntscReallyIn 3
  1100.  
  1101. #define compositeIn 0
  1102.  
  1103. #define sVideoIn 1
  1104.  
  1105. #define rgbComponentIn 2
  1106.  
  1107. #define rgbComponentSyncIn 3
  1108.  
  1109. #define yuvComponentIn 4
  1110.  
  1111. #define yuvComponentSyncIn 5
  1112.  
  1113. #define vdPlayThruOff 0
  1114.  
  1115. #define vdPlayThruOn 1
  1116.  
  1117. #define vdDigitizerBW 0
  1118.  
  1119. #define vdDigitizerRGB 1
  1120.  
  1121. #define vdBroadcastMode 0
  1122.  
  1123. #define vdVTRMode 1
  1124.  
  1125. #define vdUseAnyField 0
  1126.  
  1127. #define vdUseOddField 1
  1128.  
  1129. #define vdUseEvenField 2
  1130.  
  1131. #define vdTypeBasic 0
  1132.  
  1133. #define vdTypeAlpha 1
  1134.  
  1135. #define vdTypeMask 2
  1136.  
  1137. #define vdTypeKey 3
  1138.  
  1139. #define digiUnimpErr -2201
  1140.  
  1141. #define qtParamErr -2202
  1142.  
  1143. #define matrixErr -2203
  1144.  
  1145. #define notExactMatrix -2204
  1146.  
  1147. #define noMoreKeyColors -2205
  1148.  
  1149. #define notExactSize -2206
  1150.  
  1151. #define badDepth -2207
  1152.  
  1153. #define noDMA -2208
  1154.  
  1155. #define badCallOrder -2209
  1156.  
  1157. #define digiInDoesNTSC (1L<<0)
  1158.  
  1159. #define digiInDoesPAL (1L<<1)
  1160.  
  1161. #define digiInDoesSECAM (1L<<2)
  1162.  
  1163. #define digiInDoesGenLock (1L<<7)
  1164.  
  1165. #define digiInDoesComposite (1L<<8)
  1166.  
  1167. #define digiInDoesSVideo (1L<<9)
  1168.  
  1169. #define digiInDoesComponent (1L<<10)
  1170.  
  1171. #define digiInVTR_Broadcast (1L<<11)
  1172.  
  1173. #define digiInDoesColor (1L<<12)
  1174.  
  1175. #define digiInDoesBW (1L<<13)
  1176.  
  1177. #define digiInSignalLock (1L<<31)
  1178.  
  1179. #define digiOutDoes1 (1L<<0)
  1180.  
  1181. #define digiOutDoes2 (1L<<1)
  1182.  
  1183. #define digiOutDoes4 (1L<<2)
  1184.  
  1185. #define digiOutDoes8 (1L<<3)
  1186.  
  1187. #define digiOutDoes16 (1L<<4)
  1188.  
  1189. #define digiOutDoes32 (1L<<5)
  1190.  
  1191. #define digiOutDoesDither (1L<<6)
  1192.  
  1193. #define digiOutDoesStretch (1L<<7)
  1194.  
  1195. #define digiOutDoesShrink (1L<<8)
  1196.  
  1197. #define digiOutDoesMask (1L<<9)
  1198.  
  1199. #define digiOutDoesDouble (1L<<11)
  1200.  
  1201. #define digiOutDoesQuad (1L<<12)
  1202.  
  1203. #define digiOutDoesQuarter (1L<<13)
  1204.  
  1205. #define digiOutDoesSixteenth (1L<<14)
  1206.  
  1207. #define digiOutDoesRotate (1L<<15)
  1208.  
  1209. #define digiOutDoesHorizFlip (1L<<16)
  1210.  
  1211. #define digiOutDoesVertFlip (1L<<17)
  1212.  
  1213. #define digiOutDoesSkew (1L<<18)
  1214.  
  1215. #define digiOutDoesBlend (1L<<19)
  1216.  
  1217. #define digiOutDoesWarp (1L<<20)
  1218.  
  1219. #define digiOutDoesHW_DMA (1L<<21)
  1220.  
  1221. #define digiOutDoesHWPlayThru (1L<<22)
  1222.  
  1223. #define digiOutDoesILUT (1L<<23)
  1224.  
  1225. #define digiOutDoesKeyColor (1L<<24)
  1226.  
  1227. #define digiOutDoesAsyncGrabs (1L<<25)
  1228.  
  1229. #define digiOutDoesUnreadableScreenBits (1L<<26)
  1230.  
  1231. #define digiOutDoesCompress (1L<<27)
  1232.  
  1233. #define digiOutDoesCompressOnly (1L<<28)
  1234.  
  1235. #define digiOutDoesPlayThruDuringCompress (1L<<29)
  1236.  
  1237. typedef ComponentInstance VideoDigitizerComponent;
  1238.  
  1239. typedef ComponentResult VideoDigitizerError;
  1240.  
  1241. #if defined(powerc) || defined (__powerc)
  1242. #pragma options align=mac68k
  1243. #endif
  1244. struct DigitizerInfo {
  1245.     short                        vdigType;
  1246.     long                        inputCapabilityFlags;
  1247.     long                        outputCapabilityFlags;
  1248.     long                        inputCurrentFlags;
  1249.     long                        outputCurrentFlags;
  1250.     short                        slot;
  1251.     GDHandle                    gdh;
  1252.     GDHandle                    maskgdh;
  1253.     short                        minDestHeight;
  1254.     short                        minDestWidth;
  1255.     short                        maxDestHeight;
  1256.     short                        maxDestWidth;
  1257.     short                        blendLevels;
  1258.     long                        reserved;
  1259. };
  1260. #if defined(powerc) || defined(__powerc)
  1261. #pragma options align=reset
  1262. #endif
  1263.  
  1264. typedef struct DigitizerInfo DigitizerInfo;
  1265.  
  1266. #if defined(powerc) || defined (__powerc)
  1267. #pragma options align=mac68k
  1268. #endif
  1269. struct VdigType {
  1270.     long                        type;
  1271.     long                        reserved;
  1272. };
  1273. #if defined(powerc) || defined(__powerc)
  1274. #pragma options align=reset
  1275. #endif
  1276.  
  1277. typedef struct VdigType VdigType;
  1278.  
  1279. #if defined(powerc) || defined (__powerc)
  1280. #pragma options align=mac68k
  1281. #endif
  1282. struct VdigTypeList {
  1283.     short                        count;
  1284.     VdigType                    list[1];
  1285. };
  1286. #if defined(powerc) || defined(__powerc)
  1287. #pragma options align=reset
  1288. #endif
  1289.  
  1290. typedef struct VdigTypeList VdigTypeList;
  1291.  
  1292. #if defined(powerc) || defined (__powerc)
  1293. #pragma options align=mac68k
  1294. #endif
  1295. struct VdigBufferRec {
  1296.     PixMapHandle                dest;
  1297.     Point                        location;
  1298.     long                        reserved;
  1299. };
  1300. #if defined(powerc) || defined(__powerc)
  1301. #pragma options align=reset
  1302. #endif
  1303.  
  1304. typedef struct VdigBufferRec VdigBufferRec;
  1305.  
  1306. #if defined(powerc) || defined (__powerc)
  1307. #pragma options align=mac68k
  1308. #endif
  1309. struct VdigBufferRecList {
  1310.     short                        count;
  1311.     MatrixRecordPtr                matrix;
  1312.     RgnHandle                    mask;
  1313.     VdigBufferRec                list[1];
  1314. };
  1315. #if defined(powerc) || defined(__powerc)
  1316. #pragma options align=reset
  1317. #endif
  1318.  
  1319. typedef struct VdigBufferRecList VdigBufferRecList;
  1320.  
  1321. typedef VdigBufferRecList *VdigBufferRecListPtr, **VdigBufferRecListHandle;
  1322.  
  1323. typedef pascal void (*VdigIntProcPtr)(long flags, long refcon);
  1324.  
  1325. enum {
  1326.     uppVdigIntProcInfo = kPascalStackBased
  1327.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
  1328.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  1329. };
  1330.  
  1331. #if USESROUTINEDESCRIPTORS
  1332. typedef UniversalProcPtr VdigIntUPP;
  1333.  
  1334. #define CallVdigIntProc(userRoutine, flags, refcon)        \
  1335.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppVdigIntProcInfo, (flags), (refcon))
  1336. #define NewVdigIntProc(userRoutine)        \
  1337.         (VdigIntUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppVdigIntProcInfo, GetCurrentISA())
  1338. #else
  1339. typedef VdigIntProcPtr VdigIntUPP;
  1340.  
  1341. #define CallVdigIntProc(userRoutine, flags, refcon)        \
  1342.         (*(userRoutine))((flags), (refcon))
  1343. #define NewVdigIntProc(userRoutine)        \
  1344.         (VdigIntUPP)(userRoutine)
  1345. #endif
  1346.  
  1347. #if defined(powerc) || defined (__powerc)
  1348. #pragma options align=mac68k
  1349. #endif
  1350. struct VDCompressionList {
  1351.     CodecComponent                codec;
  1352.     CodecType                    cType;
  1353.     Str63                        typeName;
  1354.     Str63                        name;
  1355.     long                        formatFlags;
  1356.     long                        compressFlags;
  1357.     long                        reserved;
  1358. };
  1359. #if defined(powerc) || defined(__powerc)
  1360. #pragma options align=reset
  1361. #endif
  1362.  
  1363. typedef struct VDCompressionList VDCompressionList;
  1364.  
  1365. typedef VDCompressionList *VDCompressionListPtr, **VDCompressionListHandle;
  1366.  
  1367. enum  {
  1368.     dmaDepth1                    = 1,
  1369.     dmaDepth2                    = 2,
  1370.     dmaDepth4                    = 4,
  1371.     dmaDepth8                    = 8,
  1372.     dmaDepth16                    = 16,
  1373.     dmaDepth32                    = 32,
  1374.     dmaDepth2Gray                = 64,
  1375.     dmaDepth4Gray                = 128,
  1376.     dmaDepth8Gray                = 256
  1377. };
  1378.  
  1379. #define kVDIGControlledFrameRate (-1)
  1380.  
  1381. enum  {
  1382.     kvdigSelectors                = 86
  1383. };
  1384.  
  1385. #ifdef __cplusplus
  1386. extern "C" {
  1387. #endif
  1388.  
  1389. extern pascal VideoDigitizerError VDGetMaxSrcRect(VideoDigitizerComponent ci, short inputStd, Rect *maxSrcRect)
  1390.  FIVEWORDINLINE(0x2F3C, 0x6, 0x1, 0x7000, 0xA82A);
  1391. extern pascal VideoDigitizerError VDGetActiveSrcRect(VideoDigitizerComponent ci, short inputStd, Rect *activeSrcRect)
  1392.  FIVEWORDINLINE(0x2F3C, 0x6, 0x2, 0x7000, 0xA82A);
  1393. extern pascal VideoDigitizerError VDSetDigitizerRect(VideoDigitizerComponent ci, Rect *digitizerRect)
  1394.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3, 0x7000, 0xA82A);
  1395. extern pascal VideoDigitizerError VDGetDigitizerRect(VideoDigitizerComponent ci, Rect *digitizerRect)
  1396.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4, 0x7000, 0xA82A);
  1397. extern pascal VideoDigitizerError VDGetVBlankRect(VideoDigitizerComponent ci, short inputStd, Rect *vBlankRect)
  1398.  FIVEWORDINLINE(0x2F3C, 0x6, 0x5, 0x7000, 0xA82A);
  1399. extern pascal VideoDigitizerError VDGetMaskPixMap(VideoDigitizerComponent ci, PixMapHandle maskPixMap)
  1400.  FIVEWORDINLINE(0x2F3C, 0x4, 0x6, 0x7000, 0xA82A);
  1401. extern pascal VideoDigitizerError VDGetPlayThruDestination(VideoDigitizerComponent ci, PixMapHandle *dest, Rect *destRect, MatrixRecord *m, RgnHandle *mask)
  1402.  FIVEWORDINLINE(0x2F3C, 0x10, 0x8, 0x7000, 0xA82A);
  1403. extern pascal VideoDigitizerError VDUseThisCLUT(VideoDigitizerComponent ci, CTabHandle colorTableHandle)
  1404.  FIVEWORDINLINE(0x2F3C, 0x4, 0x9, 0x7000, 0xA82A);
  1405. extern pascal VideoDigitizerError VDSetInputGammaValue(VideoDigitizerComponent ci, Fixed channel1, Fixed channel2, Fixed channel3)
  1406.  FIVEWORDINLINE(0x2F3C, 0xC, 0xA, 0x7000, 0xA82A);
  1407. extern pascal VideoDigitizerError VDGetInputGammaValue(VideoDigitizerComponent ci, Fixed *channel1, Fixed *channel2, Fixed *channel3)
  1408.  FIVEWORDINLINE(0x2F3C, 0xC, 0xB, 0x7000, 0xA82A);
  1409. extern pascal VideoDigitizerError VDSetBrightness(VideoDigitizerComponent ci, unsigned short *brightness)
  1410.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  1411. extern pascal VideoDigitizerError VDGetBrightness(VideoDigitizerComponent ci, unsigned short *brightness)
  1412.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  1413. extern pascal VideoDigitizerError VDSetContrast(VideoDigitizerComponent ci, unsigned short *contrast)
  1414.  FIVEWORDINLINE(0x2F3C, 0x4, 0xE, 0x7000, 0xA82A);
  1415. extern pascal VideoDigitizerError VDSetHue(VideoDigitizerComponent ci, unsigned short *hue)
  1416.  FIVEWORDINLINE(0x2F3C, 0x4, 0xF, 0x7000, 0xA82A);
  1417. extern pascal VideoDigitizerError VDSetSharpness(VideoDigitizerComponent ci, unsigned short *sharpness)
  1418.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10, 0x7000, 0xA82A);
  1419. extern pascal VideoDigitizerError VDSetSaturation(VideoDigitizerComponent ci, unsigned short *saturation)
  1420.  FIVEWORDINLINE(0x2F3C, 0x4, 0x11, 0x7000, 0xA82A);
  1421. extern pascal VideoDigitizerError VDGetContrast(VideoDigitizerComponent ci, unsigned short *contrast)
  1422.  FIVEWORDINLINE(0x2F3C, 0x4, 0x12, 0x7000, 0xA82A);
  1423. extern pascal VideoDigitizerError VDGetHue(VideoDigitizerComponent ci, unsigned short *hue)
  1424.  FIVEWORDINLINE(0x2F3C, 0x4, 0x13, 0x7000, 0xA82A);
  1425. extern pascal VideoDigitizerError VDGetSharpness(VideoDigitizerComponent ci, unsigned short *sharpness)
  1426.  FIVEWORDINLINE(0x2F3C, 0x4, 0x14, 0x7000, 0xA82A);
  1427. extern pascal VideoDigitizerError VDGetSaturation(VideoDigitizerComponent ci, unsigned short *saturation)
  1428.  FIVEWORDINLINE(0x2F3C, 0x4, 0x15, 0x7000, 0xA82A);
  1429. extern pascal VideoDigitizerError VDGrabOneFrame(VideoDigitizerComponent ci)
  1430.  FIVEWORDINLINE(0x2F3C, 0, 0x16, 0x7000, 0xA82A);
  1431. extern pascal VideoDigitizerError VDGetMaxAuxBuffer(VideoDigitizerComponent ci, PixMapHandle *pm, Rect *r)
  1432.  FIVEWORDINLINE(0x2F3C, 0x8, 0x17, 0x7000, 0xA82A);
  1433. extern pascal VideoDigitizerError VDGetDigitizerInfo(VideoDigitizerComponent ci, DigitizerInfo *info)
  1434.  FIVEWORDINLINE(0x2F3C, 0x4, 0x19, 0x7000, 0xA82A);
  1435. extern pascal VideoDigitizerError VDGetCurrentFlags(VideoDigitizerComponent ci, long *inputCurrentFlag, long *outputCurrentFlag)
  1436.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1A, 0x7000, 0xA82A);
  1437. extern pascal VideoDigitizerError VDSetKeyColor(VideoDigitizerComponent ci, long index)
  1438.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1B, 0x7000, 0xA82A);
  1439. extern pascal VideoDigitizerError VDGetKeyColor(VideoDigitizerComponent ci, long *index)
  1440.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1C, 0x7000, 0xA82A);
  1441. extern pascal VideoDigitizerError VDAddKeyColor(VideoDigitizerComponent ci, long *index)
  1442.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1D, 0x7000, 0xA82A);
  1443. extern pascal VideoDigitizerError VDGetNextKeyColor(VideoDigitizerComponent ci, long index)
  1444.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  1445. extern pascal VideoDigitizerError VDSetKeyColorRange(VideoDigitizerComponent ci, RGBColor *minRGB, RGBColor *maxRGB)
  1446.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1F, 0x7000, 0xA82A);
  1447. extern pascal VideoDigitizerError VDGetKeyColorRange(VideoDigitizerComponent ci, RGBColor *minRGB, RGBColor *maxRGB)
  1448.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20, 0x7000, 0xA82A);
  1449. extern pascal VideoDigitizerError VDSetDigitizerUserInterrupt(VideoDigitizerComponent ci, long flags, VdigIntUPP userInterruptProc, long refcon)
  1450.  FIVEWORDINLINE(0x2F3C, 0xC, 0x21, 0x7000, 0xA82A);
  1451. extern pascal VideoDigitizerError VDSetInputColorSpaceMode(VideoDigitizerComponent ci, short colorSpaceMode)
  1452.  FIVEWORDINLINE(0x2F3C, 0x2, 0x22, 0x7000, 0xA82A);
  1453. extern pascal VideoDigitizerError VDGetInputColorSpaceMode(VideoDigitizerComponent ci, short *colorSpaceMode)
  1454.  FIVEWORDINLINE(0x2F3C, 0x4, 0x23, 0x7000, 0xA82A);
  1455. extern pascal VideoDigitizerError VDSetClipState(VideoDigitizerComponent ci, short clipEnable)
  1456.  FIVEWORDINLINE(0x2F3C, 0x2, 0x24, 0x7000, 0xA82A);
  1457. extern pascal VideoDigitizerError VDGetClipState(VideoDigitizerComponent ci, short *clipEnable)
  1458.  FIVEWORDINLINE(0x2F3C, 0x4, 0x25, 0x7000, 0xA82A);
  1459. extern pascal VideoDigitizerError VDSetClipRgn(VideoDigitizerComponent ci, RgnHandle clipRegion)
  1460.  FIVEWORDINLINE(0x2F3C, 0x4, 0x26, 0x7000, 0xA82A);
  1461. extern pascal VideoDigitizerError VDClearClipRgn(VideoDigitizerComponent ci, RgnHandle clipRegion)
  1462.  FIVEWORDINLINE(0x2F3C, 0x4, 0x27, 0x7000, 0xA82A);
  1463. extern pascal VideoDigitizerError VDGetCLUTInUse(VideoDigitizerComponent ci, CTabHandle *colorTableHandle)
  1464.  FIVEWORDINLINE(0x2F3C, 0x4, 0x28, 0x7000, 0xA82A);
  1465. extern pascal VideoDigitizerError VDSetPLLFilterType(VideoDigitizerComponent ci, short pllType)
  1466.  FIVEWORDINLINE(0x2F3C, 0x2, 0x29, 0x7000, 0xA82A);
  1467. extern pascal VideoDigitizerError VDGetPLLFilterType(VideoDigitizerComponent ci, short *pllType)
  1468.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2A, 0x7000, 0xA82A);
  1469. extern pascal VideoDigitizerError VDGetMaskandValue(VideoDigitizerComponent ci, unsigned short blendLevel, long *mask, long *value)
  1470.  FIVEWORDINLINE(0x2F3C, 0xA, 0x2B, 0x7000, 0xA82A);
  1471. extern pascal VideoDigitizerError VDSetMasterBlendLevel(VideoDigitizerComponent ci, unsigned short *blendLevel)
  1472.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2C, 0x7000, 0xA82A);
  1473. extern pascal VideoDigitizerError VDSetPlayThruDestination(VideoDigitizerComponent ci, PixMapHandle dest, Rect *destRect, MatrixRecord *m, RgnHandle mask)
  1474.  FIVEWORDINLINE(0x2F3C, 0x10, 0x2D, 0x7000, 0xA82A);
  1475. extern pascal VideoDigitizerError VDSetPlayThruOnOff(VideoDigitizerComponent ci, short state)
  1476.  FIVEWORDINLINE(0x2F3C, 0x2, 0x2E, 0x7000, 0xA82A);
  1477. extern pascal VideoDigitizerError VDSetFieldPreference(VideoDigitizerComponent ci, short fieldFlag)
  1478.  FIVEWORDINLINE(0x2F3C, 0x2, 0x2F, 0x7000, 0xA82A);
  1479. extern pascal VideoDigitizerError VDGetFieldPreference(VideoDigitizerComponent ci, short *fieldFlag)
  1480.  FIVEWORDINLINE(0x2F3C, 0x4, 0x30, 0x7000, 0xA82A);
  1481. extern pascal VideoDigitizerError VDPreflightDestination(VideoDigitizerComponent ci, Rect *digitizerRect, PixMap **dest, Rect *destRect, MatrixRecord *m)
  1482.  FIVEWORDINLINE(0x2F3C, 0x10, 0x32, 0x7000, 0xA82A);
  1483. extern pascal VideoDigitizerError VDPreflightGlobalRect(VideoDigitizerComponent ci, GrafPtr theWindow, Rect *globalRect)
  1484.  FIVEWORDINLINE(0x2F3C, 0x8, 0x33, 0x7000, 0xA82A);
  1485. extern pascal VideoDigitizerError VDSetPlayThruGlobalRect(VideoDigitizerComponent ci, GrafPtr theWindow, Rect *globalRect)
  1486.  FIVEWORDINLINE(0x2F3C, 0x8, 0x34, 0x7000, 0xA82A);
  1487. extern pascal VideoDigitizerError VDSetInputGammaRecord(VideoDigitizerComponent ci, VDGamRecPtr inputGammaPtr)
  1488.  FIVEWORDINLINE(0x2F3C, 0x4, 0x35, 0x7000, 0xA82A);
  1489. extern pascal VideoDigitizerError VDGetInputGammaRecord(VideoDigitizerComponent ci, VDGamRecPtr *inputGammaPtr)
  1490.  FIVEWORDINLINE(0x2F3C, 0x4, 0x36, 0x7000, 0xA82A);
  1491. extern pascal VideoDigitizerError VDSetBlackLevelValue(VideoDigitizerComponent ci, unsigned short *blackLevel)
  1492.  FIVEWORDINLINE(0x2F3C, 0x4, 0x37, 0x7000, 0xA82A);
  1493. extern pascal VideoDigitizerError VDGetBlackLevelValue(VideoDigitizerComponent ci, unsigned short *blackLevel)
  1494.  FIVEWORDINLINE(0x2F3C, 0x4, 0x38, 0x7000, 0xA82A);
  1495. extern pascal VideoDigitizerError VDSetWhiteLevelValue(VideoDigitizerComponent ci, unsigned short *whiteLevel)
  1496.  FIVEWORDINLINE(0x2F3C, 0x4, 0x39, 0x7000, 0xA82A);
  1497. extern pascal VideoDigitizerError VDGetWhiteLevelValue(VideoDigitizerComponent ci, unsigned short *whiteLevel)
  1498.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3A, 0x7000, 0xA82A);
  1499. extern pascal VideoDigitizerError VDGetVideoDefaults(VideoDigitizerComponent ci, unsigned short *blackLevel, unsigned short *whiteLevel, unsigned short *brightness, unsigned short *hue, unsigned short *saturation, unsigned short *contrast, unsigned short *sharpness)
  1500.  FIVEWORDINLINE(0x2F3C, 0x1C, 0x3B, 0x7000, 0xA82A);
  1501. extern pascal VideoDigitizerError VDGetNumberOfInputs(VideoDigitizerComponent ci, short *inputs)
  1502.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3C, 0x7000, 0xA82A);
  1503. extern pascal VideoDigitizerError VDGetInputFormat(VideoDigitizerComponent ci, short input, short *format)
  1504.  FIVEWORDINLINE(0x2F3C, 0x6, 0x3D, 0x7000, 0xA82A);
  1505. extern pascal VideoDigitizerError VDSetInput(VideoDigitizerComponent ci, short input)
  1506.  FIVEWORDINLINE(0x2F3C, 0x2, 0x3E, 0x7000, 0xA82A);
  1507. extern pascal VideoDigitizerError VDGetInput(VideoDigitizerComponent ci, short *input)
  1508.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3F, 0x7000, 0xA82A);
  1509. extern pascal VideoDigitizerError VDSetInputStandard(VideoDigitizerComponent ci, short inputStandard)
  1510.  FIVEWORDINLINE(0x2F3C, 0x2, 0x40, 0x7000, 0xA82A);
  1511. extern pascal VideoDigitizerError VDSetupBuffers(VideoDigitizerComponent ci, VdigBufferRecListHandle bufferList)
  1512.  FIVEWORDINLINE(0x2F3C, 0x4, 0x41, 0x7000, 0xA82A);
  1513. extern pascal VideoDigitizerError VDGrabOneFrameAsync(VideoDigitizerComponent ci, short buffer)
  1514.  FIVEWORDINLINE(0x2F3C, 0x2, 0x42, 0x7000, 0xA82A);
  1515. extern pascal VideoDigitizerError VDDone(VideoDigitizerComponent ci, short buffer)
  1516.  FIVEWORDINLINE(0x2F3C, 0x2, 0x43, 0x7000, 0xA82A);
  1517. extern pascal VideoDigitizerError VDSetCompression(VideoDigitizerComponent ci, OSType compressType, short depth, Rect *bounds, CodecQ spatialQuality, CodecQ temporalQuality, long keyFrameRate)
  1518.  FIVEWORDINLINE(0x2F3C, 0x16, 0x44, 0x7000, 0xA82A);
  1519. extern pascal VideoDigitizerError VDCompressOneFrameAsync(VideoDigitizerComponent ci)
  1520.  FIVEWORDINLINE(0x2F3C, 0, 0x45, 0x7000, 0xA82A);
  1521. extern pascal VideoDigitizerError VDCompressDone(VideoDigitizerComponent ci, Boolean *done, Ptr *theData, long *dataSize, unsigned char *similarity, TimeRecord *t)
  1522.  FIVEWORDINLINE(0x2F3C, 0x14, 0x46, 0x7000, 0xA82A);
  1523. extern pascal VideoDigitizerError VDReleaseCompressBuffer(VideoDigitizerComponent ci, Ptr bufferAddr)
  1524.  FIVEWORDINLINE(0x2F3C, 0x4, 0x47, 0x7000, 0xA82A);
  1525. extern pascal VideoDigitizerError VDGetImageDescription(VideoDigitizerComponent ci, ImageDescriptionHandle desc)
  1526.  FIVEWORDINLINE(0x2F3C, 0x4, 0x48, 0x7000, 0xA82A);
  1527. extern pascal VideoDigitizerError VDResetCompressSequence(VideoDigitizerComponent ci)
  1528.  FIVEWORDINLINE(0x2F3C, 0, 0x49, 0x7000, 0xA82A);
  1529. extern pascal VideoDigitizerError VDSetCompressionOnOff(VideoDigitizerComponent ci, Boolean state)
  1530.  FIVEWORDINLINE(0x2F3C, 0x2, 0x4A, 0x7000, 0xA82A);
  1531. extern pascal VideoDigitizerError VDGetCompressionTypes(VideoDigitizerComponent ci, VDCompressionListHandle h)
  1532.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4B, 0x7000, 0xA82A);
  1533. extern pascal VideoDigitizerError VDSetTimeBase(VideoDigitizerComponent ci, TimeBase t)
  1534.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4C, 0x7000, 0xA82A);
  1535. extern pascal VideoDigitizerError VDSetFrameRate(VideoDigitizerComponent ci, Fixed framesPerSecond)
  1536.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4D, 0x7000, 0xA82A);
  1537. extern pascal VideoDigitizerError VDGetDataRate(VideoDigitizerComponent ci, long *milliSecPerFrame, Fixed *framesPerSecond, long *bytesPerSecond)
  1538.  FIVEWORDINLINE(0x2F3C, 0xC, 0x4E, 0x7000, 0xA82A);
  1539. extern pascal VideoDigitizerError VDGetSoundInputDriver(VideoDigitizerComponent ci, Str255 soundDriverName)
  1540.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4F, 0x7000, 0xA82A);
  1541. extern pascal VideoDigitizerError VDGetDMADepths(VideoDigitizerComponent ci, long *depthArray, long *preferredDepth)
  1542.  FIVEWORDINLINE(0x2F3C, 0x8, 0x50, 0x7000, 0xA82A);
  1543. extern pascal VideoDigitizerError VDGetPreferredTimeScale(VideoDigitizerComponent ci, TimeScale *preferred)
  1544.  FIVEWORDINLINE(0x2F3C, 0x4, 0x51, 0x7000, 0xA82A);
  1545. extern pascal VideoDigitizerError VDReleaseAsyncBuffers(VideoDigitizerComponent ci)
  1546.  FIVEWORDINLINE(0x2F3C, 0, 0x52, 0x7000, 0xA82A);
  1547. extern pascal VideoDigitizerError VDSetDataRate(VideoDigitizerComponent ci, long bytesPerSecond)
  1548.  FIVEWORDINLINE(0x2F3C, 0x4, 0x54, 0x7000, 0xA82A);
  1549. extern pascal VideoDigitizerError VDGetTimeCode(VideoDigitizerComponent ci, TimeRecord *atTime, void *timeCodeFormat, void *timeCodeTime)
  1550.  FIVEWORDINLINE(0x2F3C, 0xC, 0x55, 0x7000, 0xA82A);
  1551. extern pascal VideoDigitizerError VDUseSafeBuffers(VideoDigitizerComponent ci, Boolean useSafeBuffers)
  1552.  FIVEWORDINLINE(0x2F3C, 0x2, 0x56, 0x7000, 0xA82A);
  1553. #ifdef __cplusplus
  1554. }
  1555. #endif
  1556.  
  1557. enum  {
  1558.     kSelectVDGetMaxSrcRect        = 0x1,
  1559.     kSelectVDGetActiveSrcRect    = 0x2,
  1560.     kSelectVDSetDigitizerRect    = 0x3,
  1561.     kSelectVDGetDigitizerRect    = 0x4,
  1562.     kSelectVDGetVBlankRect        = 0x5,
  1563.     kSelectVDGetMaskPixMap        = 0x6,
  1564.     kSelectVDGetPlayThruDestination = 0x8,
  1565.     kSelectVDUseThisCLUT        = 0x9,
  1566.     kSelectVDSetInputGammaValue    = 0xA,
  1567.     kSelectVDGetInputGammaValue    = 0xB,
  1568.     kSelectVDSetBrightness        = 0xC,
  1569.     kSelectVDGetBrightness        = 0xD,
  1570.     kSelectVDSetContrast        = 0xE,
  1571.     kSelectVDSetHue                = 0xF,
  1572.     kSelectVDSetSharpness        = 0x10,
  1573.     kSelectVDSetSaturation        = 0x11,
  1574.     kSelectVDGetContrast        = 0x12,
  1575.     kSelectVDGetHue                = 0x13,
  1576.     kSelectVDGetSharpness        = 0x14,
  1577.     kSelectVDGetSaturation        = 0x15,
  1578.     kSelectVDGrabOneFrame        = 0x16,
  1579.     kSelectVDGetMaxAuxBuffer    = 0x17,
  1580.     kSelectVDGetDigitizerInfo    = 0x19,
  1581.     kSelectVDGetCurrentFlags    = 0x1A,
  1582.     kSelectVDSetKeyColor        = 0x1B,
  1583.     kSelectVDGetKeyColor        = 0x1C,
  1584.     kSelectVDAddKeyColor        = 0x1D,
  1585.     kSelectVDGetNextKeyColor    = 0x1E,
  1586.     kSelectVDSetKeyColorRange    = 0x1F,
  1587.     kSelectVDGetKeyColorRange    = 0x20,
  1588.     kSelectVDSetDigitizerUserInterrupt = 0x21,
  1589.     kSelectVDSetInputColorSpaceMode = 0x22,
  1590.     kSelectVDGetInputColorSpaceMode = 0x23,
  1591.     kSelectVDSetClipState        = 0x24,
  1592.     kSelectVDGetClipState        = 0x25,
  1593.     kSelectVDSetClipRgn            = 0x26,
  1594.     kSelectVDClearClipRgn        = 0x27,
  1595.     kSelectVDGetCLUTInUse        = 0x28,
  1596.     kSelectVDSetPLLFilterType    = 0x29,
  1597.     kSelectVDGetPLLFilterType    = 0x2A,
  1598.     kSelectVDGetMaskandValue    = 0x2B,
  1599.     kSelectVDSetMasterBlendLevel = 0x2C,
  1600.     kSelectVDSetPlayThruDestination = 0x2D,
  1601.     kSelectVDSetPlayThruOnOff    = 0x2E,
  1602.     kSelectVDSetFieldPreference    = 0x2F,
  1603.     kSelectVDGetFieldPreference    = 0x30,
  1604.     kSelectVDPreflightDestination = 0x32,
  1605.     kSelectVDPreflightGlobalRect = 0x33,
  1606.     kSelectVDSetPlayThruGlobalRect = 0x34,
  1607.     kSelectVDSetInputGammaRecord = 0x35,
  1608.     kSelectVDGetInputGammaRecord = 0x36,
  1609.     kSelectVDSetBlackLevelValue    = 0x37,
  1610.     kSelectVDGetBlackLevelValue    = 0x38,
  1611.     kSelectVDSetWhiteLevelValue    = 0x39,
  1612.     kSelectVDGetWhiteLevelValue    = 0x3A,
  1613.     kSelectVDGetVideoDefaults    = 0x3B,
  1614.     kSelectVDGetNumberOfInputs    = 0x3C,
  1615.     kSelectVDGetInputFormat        = 0x3D,
  1616.     kSelectVDSetInput            = 0x3E,
  1617.     kSelectVDGetInput            = 0x3F,
  1618.     kSelectVDSetInputStandard    = 0x40,
  1619.     kSelectVDSetupBuffers        = 0x41,
  1620.     kSelectVDGrabOneFrameAsync    = 0x42,
  1621.     kSelectVDDone                = 0x43,
  1622.     kSelectVDSetCompression        = 0x44,
  1623.     kSelectVDCompressOneFrameAsync = 0x45,
  1624.     kSelectVDCompressDone        = 0x46,
  1625.     kSelectVDReleaseCompressBuffer = 0x47,
  1626.     kSelectVDGetImageDescription = 0x48,
  1627.     kSelectVDResetCompressSequence = 0x49,
  1628.     kSelectVDSetCompressionOnOff = 0x4A,
  1629.     kSelectVDGetCompressionTypes = 0x4B,
  1630.     kSelectVDSetTimeBase        = 0x4C,
  1631.     kSelectVDSetFrameRate        = 0x4D,
  1632.     kSelectVDGetDataRate        = 0x4E,
  1633.     kSelectVDGetSoundInputDriver = 0x4F,
  1634.     kSelectVDGetDMADepths        = 0x50,
  1635.     kSelectVDGetPreferredTimeScale = 0x51,
  1636.     kSelectVDReleaseAsyncBuffers = 0x52,
  1637.     kSelectVDSetDataRate        = 0x54,
  1638.     kSelectVDGetTimeCode        = 0x55,
  1639.     kSelectVDUseSafeBuffers        = 0x56
  1640. };
  1641.  
  1642. #define StandardCompressionType 'scdi'
  1643.  
  1644. #define StandardCompressionSubType 'imag'
  1645.  
  1646. typedef pascal Boolean (*SCModalFilterProcPtr)(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, long refcon);
  1647.  
  1648. enum {
  1649.     uppSCModalFilterProcInfo = kPascalStackBased
  1650.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  1651.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  1652.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord*)))
  1653.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*)))
  1654.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
  1655. };
  1656.  
  1657. #if USESROUTINEDESCRIPTORS
  1658. typedef UniversalProcPtr SCModalFilterUPP;
  1659.  
  1660. #define CallSCModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refcon)        \
  1661.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSCModalFilterProcInfo, (theDialog), (theEvent), (itemHit), (refcon))
  1662. #define NewSCModalFilterProc(userRoutine)        \
  1663.         (SCModalFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSCModalFilterProcInfo, GetCurrentISA())
  1664. #else
  1665. typedef SCModalFilterProcPtr SCModalFilterUPP;
  1666.  
  1667. #define CallSCModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refcon)        \
  1668.         (*(userRoutine))((theDialog), (theEvent), (itemHit), (refcon))
  1669. #define NewSCModalFilterProc(userRoutine)        \
  1670.         (SCModalFilterUPP)(userRoutine)
  1671. #endif
  1672.  
  1673. typedef pascal short (*SCModalHookProcPtr)(DialogPtr theDialog, short itemHit, void *params, long refcon);
  1674.  
  1675. enum {
  1676.     uppSCModalHookProcInfo = kPascalStackBased
  1677.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  1678.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  1679.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  1680.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*)))
  1681.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
  1682. };
  1683.  
  1684. #if USESROUTINEDESCRIPTORS
  1685. typedef UniversalProcPtr SCModalHookUPP;
  1686.  
  1687. #define CallSCModalHookProc(userRoutine, theDialog, itemHit, params, refcon)        \
  1688.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSCModalHookProcInfo, (theDialog), (itemHit), (params), (refcon))
  1689. #define NewSCModalHookProc(userRoutine)        \
  1690.         (SCModalHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSCModalHookProcInfo, GetCurrentISA())
  1691. #else
  1692. typedef SCModalHookProcPtr SCModalHookUPP;
  1693.  
  1694. #define CallSCModalHookProc(userRoutine, theDialog, itemHit, params, refcon)        \
  1695.         (*(userRoutine))((theDialog), (itemHit), (params), (refcon))
  1696. #define NewSCModalHookProc(userRoutine)        \
  1697.         (SCModalHookUPP)(userRoutine)
  1698. #endif
  1699.  
  1700. #define scListEveryCodec (1L<<1)
  1701.  
  1702. #define scAllowZeroFrameRate (1L<<2)
  1703.  
  1704. #define scAllowZeroKeyFrameRate (1L<<3)
  1705.  
  1706. #define scShowBestDepth (1L<<4)
  1707.  
  1708. #define scUseMovableModal (1L<<5)
  1709.  
  1710. #define scPreferCropping (1<<0)
  1711.  
  1712. #define scPreferScaling (1<<1)
  1713.  
  1714. #define scPreferScalingAndCropping (scPreferScaling + scPreferCropping)
  1715.  
  1716. #define scTestImageWidth 80
  1717.  
  1718. #define scTestImageHeight 80
  1719.  
  1720. #define scOKItem 1
  1721.  
  1722. #define scCancelItem 2
  1723.  
  1724. #define scCustomItem 3
  1725.  
  1726. #define scUserCancelled 1
  1727.  
  1728. #define scPositionRect 2
  1729.  
  1730. #define scPositionDialog 3
  1731.  
  1732. #define scSetTestImagePictHandle 4
  1733.  
  1734. #define scSetTestImagePictFile 5
  1735.  
  1736. #define scSetTestImagePixMap 6
  1737.  
  1738. #define scGetBestDeviceRect 7
  1739.  
  1740. #define scRequestImageSettings 10
  1741.  
  1742. #define scCompressImage 11
  1743.  
  1744. #define scCompressPicture 12
  1745.  
  1746. #define scCompressPictureFile 13
  1747.  
  1748. #define scRequestSequenceSettings 14
  1749.  
  1750. #define scCompressSequenceBegin 15
  1751.  
  1752. #define scCompressSequenceFrame 16
  1753.  
  1754. #define scCompressSequenceEnd 17
  1755.  
  1756. #define scDefaultPictHandleSettings 18
  1757.  
  1758. #define scDefaultPictFileSettings 19
  1759.  
  1760. #define scDefaultPixMapSettings 20
  1761.  
  1762. #define scGetInfo 21
  1763.  
  1764. #define scSetInfo 22
  1765.  
  1766. #define scNewGWorld 23
  1767.  
  1768. #if defined(powerc) || defined (__powerc)
  1769. #pragma options align=mac68k
  1770. #endif
  1771. struct SCSpatialSettings {
  1772.     CodecType                    codecType;
  1773.     CodecComponent                codec;
  1774.     short                        depth;
  1775.     CodecQ                        spatialQuality;
  1776. };
  1777. #if defined(powerc) || defined(__powerc)
  1778. #pragma options align=reset
  1779. #endif
  1780.  
  1781. typedef struct SCSpatialSettings SCSpatialSettings;
  1782.  
  1783. #if defined(powerc) || defined (__powerc)
  1784. #pragma options align=mac68k
  1785. #endif
  1786. struct SCTemporalSettings {
  1787.     CodecQ                        temporalQuality;
  1788.     Fixed                        frameRate;
  1789.     long                        keyFrameRate;
  1790. };
  1791. #if defined(powerc) || defined(__powerc)
  1792. #pragma options align=reset
  1793. #endif
  1794.  
  1795. typedef struct SCTemporalSettings SCTemporalSettings;
  1796.  
  1797. #if defined(powerc) || defined (__powerc)
  1798. #pragma options align=mac68k
  1799. #endif
  1800. struct SCDataRateSettings {
  1801.     long                        dataRate;
  1802.     long                        frameDuration;
  1803.     CodecQ                        minSpatialQuality;
  1804.     CodecQ                        minTemporalQuality;
  1805. };
  1806. #if defined(powerc) || defined(__powerc)
  1807. #pragma options align=reset
  1808. #endif
  1809.  
  1810. typedef struct SCDataRateSettings SCDataRateSettings;
  1811.  
  1812. #if defined(powerc) || defined (__powerc)
  1813. #pragma options align=mac68k
  1814. #endif
  1815. struct SCExtendedProcs {
  1816.     SCModalFilterUPP            filterProc;
  1817.     SCModalHookUPP                hookProc;
  1818.     long                        refcon;
  1819.     Str31                        customName;
  1820. };
  1821. #if defined(powerc) || defined(__powerc)
  1822. #pragma options align=reset
  1823. #endif
  1824.  
  1825. typedef struct SCExtendedProcs SCExtendedProcs;
  1826.  
  1827. #define scSpatialSettingsType 'sptl'
  1828.  
  1829. #define scTemporalSettingsType 'tprl'
  1830.  
  1831. #define scDataRateSettingsType 'drat'
  1832.  
  1833. #define scColorTableType 'clut'
  1834.  
  1835. #define scProgressProcType 'prog'
  1836.  
  1837. #define scExtendedProcsType 'xprc'
  1838.  
  1839. #define scPreferenceFlagsType 'pref'
  1840.  
  1841. #define scSettingsStateType 'ssta'
  1842.  
  1843. #define scSequenceIDType 'sequ'
  1844.  
  1845. #define scWindowPositionType 'wndw'
  1846.  
  1847. #define scCodecFlagsType 'cflg'
  1848.  
  1849. #define scCodecSettingsType 'cdec'
  1850.  
  1851. #define scForceKeyValueType 'ksim'
  1852.  
  1853. #ifdef __cplusplus
  1854. extern "C" {
  1855. #endif
  1856.  
  1857. extern pascal ComponentResult SCPositionRect(ComponentInstance ci, Rect *rp, Point *where)
  1858.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2, 0x7000, 0xA82A);
  1859. extern pascal ComponentResult SCPositionDialog(ComponentInstance ci, short id, Point *where)
  1860.  FIVEWORDINLINE(0x2F3C, 0x6, 0x3, 0x7000, 0xA82A);
  1861. extern pascal ComponentResult SCSetTestImagePictHandle(ComponentInstance ci, PicHandle testPict, Rect *testRect, short testFlags)
  1862.  FIVEWORDINLINE(0x2F3C, 0xA, 0x4, 0x7000, 0xA82A);
  1863. extern pascal ComponentResult SCSetTestImagePictFile(ComponentInstance ci, short testFileRef, Rect *testRect, short testFlags)
  1864.  FIVEWORDINLINE(0x2F3C, 0x8, 0x5, 0x7000, 0xA82A);
  1865. extern pascal ComponentResult SCSetTestImagePixMap(ComponentInstance ci, PixMapHandle testPixMap, Rect *testRect, short testFlags)
  1866.  FIVEWORDINLINE(0x2F3C, 0xA, 0x6, 0x7000, 0xA82A);
  1867. extern pascal ComponentResult SCGetBestDeviceRect(ComponentInstance ci, Rect *r)
  1868.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  1869. extern pascal ComponentResult SCRequestImageSettings(ComponentInstance ci)
  1870.  FIVEWORDINLINE(0x2F3C, 0, 0xA, 0x7000, 0xA82A);
  1871. extern pascal ComponentResult SCCompressImage(ComponentInstance ci, PixMapHandle src, Rect *srcRect, ImageDescriptionHandle *desc, Handle *data)
  1872.  FIVEWORDINLINE(0x2F3C, 0x10, 0xB, 0x7000, 0xA82A);
  1873. extern pascal ComponentResult SCCompressPicture(ComponentInstance ci, PicHandle srcPicture, PicHandle dstPicture)
  1874.  FIVEWORDINLINE(0x2F3C, 0x8, 0xC, 0x7000, 0xA82A);
  1875. extern pascal ComponentResult SCCompressPictureFile(ComponentInstance ci, short srcRefNum, short dstRefNum)
  1876.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  1877. extern pascal ComponentResult SCRequestSequenceSettings(ComponentInstance ci)
  1878.  FIVEWORDINLINE(0x2F3C, 0, 0xE, 0x7000, 0xA82A);
  1879. extern pascal ComponentResult SCCompressSequenceBegin(ComponentInstance ci, PixMapHandle src, Rect *srcRect, ImageDescriptionHandle *desc)
  1880.  FIVEWORDINLINE(0x2F3C, 0xC, 0xF, 0x7000, 0xA82A);
  1881. extern pascal ComponentResult SCCompressSequenceFrame(ComponentInstance ci, PixMapHandle src, Rect *srcRect, Handle *data, long *dataSize, short *notSyncFlag)
  1882.  FIVEWORDINLINE(0x2F3C, 0x14, 0x10, 0x7000, 0xA82A);
  1883. extern pascal ComponentResult SCCompressSequenceEnd(ComponentInstance ci)
  1884.  FIVEWORDINLINE(0x2F3C, 0, 0x11, 0x7000, 0xA82A);
  1885. extern pascal ComponentResult SCDefaultPictHandleSettings(ComponentInstance ci, PicHandle srcPicture, short motion)
  1886.  FIVEWORDINLINE(0x2F3C, 0x6, 0x12, 0x7000, 0xA82A);
  1887. extern pascal ComponentResult SCDefaultPictFileSettings(ComponentInstance ci, short srcRef, short motion)
  1888.  FIVEWORDINLINE(0x2F3C, 0x4, 0x13, 0x7000, 0xA82A);
  1889. extern pascal ComponentResult SCDefaultPixMapSettings(ComponentInstance ci, PixMapHandle src, short motion)
  1890.  FIVEWORDINLINE(0x2F3C, 0x6, 0x14, 0x7000, 0xA82A);
  1891. extern pascal ComponentResult SCGetInfo(ComponentInstance ci, OSType type, void *info)
  1892.  FIVEWORDINLINE(0x2F3C, 0x8, 0x15, 0x7000, 0xA82A);
  1893. extern pascal ComponentResult SCSetInfo(ComponentInstance ci, OSType type, void *info)
  1894.  FIVEWORDINLINE(0x2F3C, 0x8, 0x16, 0x7000, 0xA82A);
  1895. extern pascal ComponentResult SCNewGWorld(ComponentInstance ci, GWorldPtr *gwp, Rect *rp, GWorldFlags flags)
  1896.  FIVEWORDINLINE(0x2F3C, 0xC, 0x17, 0x7000, 0xA82A);
  1897. extern pascal ComponentResult SCSetCompressFlags(ComponentInstance ci, long flags)
  1898.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  1899. extern pascal ComponentResult SCGetCompressFlags(ComponentInstance ci, long *flags)
  1900.  FIVEWORDINLINE(0x2F3C, 0x4, 0x19, 0x7000, 0xA82A);
  1901. #ifdef __cplusplus
  1902. }
  1903. #endif
  1904.  
  1905. #if defined(powerc) || defined (__powerc)
  1906. #pragma options align=mac68k
  1907. #endif
  1908. struct SCParams {
  1909.     long                        flags;
  1910.     CodecType                    theCodecType;
  1911.     CodecComponent                theCodec;
  1912.     CodecQ                        spatialQuality;
  1913.     CodecQ                        temporalQuality;
  1914.     short                        depth;
  1915.     Fixed                        frameRate;
  1916.     long                        keyFrameRate;
  1917.     long                        reserved1;
  1918.     long                        reserved2;
  1919. };
  1920. #if defined(powerc) || defined(__powerc)
  1921. #pragma options align=reset
  1922. #endif
  1923.  
  1924. typedef struct SCParams SCParams;
  1925.  
  1926. #define scGetCompression 1
  1927.  
  1928. #define scShowMotionSettings (1L<<0)
  1929.  
  1930. #define scSettingsChangedItem -1
  1931.  
  1932. #define scCompressFlagIgnoreIdenticalFrames 1
  1933.  
  1934. #ifdef __cplusplus
  1935. extern "C" {
  1936. #endif
  1937.  
  1938. extern pascal ComponentResult SCGetCompressionExtended(ComponentInstance ci, SCParams *params, Point where, SCModalFilterUPP filterProc, SCModalHookUPP hookProc, long refcon, StringPtr customName)
  1939.  FIVEWORDINLINE(0x2F3C, 0x18, 0x1, 0x7000, 0xA82A);
  1940. #define SCGetCompression(ci, params, where) SCGetCompressionExtended(ci,params,where,0,0,0,0)
  1941.  
  1942. #ifdef __cplusplus
  1943. }
  1944. #endif
  1945.  
  1946. typedef ComponentInstance MovieImportComponent, MovieExportComponent;
  1947.  
  1948. #define MovieImportType 'eat '
  1949.  
  1950. #define MovieExportType 'spit'
  1951.  
  1952. enum  {
  1953.     canMovieImportHandles        = 1 << 0,
  1954.     canMovieImportFiles            = 1 << 1,
  1955.     hasMovieImportUserInterface    = 1 << 2,
  1956.     canMovieExportHandles        = 1 << 3,
  1957.     canMovieExportFiles            = 1 << 4,
  1958.     hasMovieExportUserInterface    = 1 << 5,
  1959.     dontAutoFileMovieImport        = 1 << 6,
  1960.     canMovieExportAuxDataHandle    = 1 << 7,
  1961.     canMovieImportValidateHandles = 1 << 8,
  1962.     canMovieImportValidateFile    = 1 << 9,
  1963.     dontRegisterWithEasyOpen    = 1 << 10,
  1964.     canMovieImportInPlace        = 1 << 11,
  1965.     movieImportSubTypeIsFileExtension = 1 << 12
  1966. };
  1967.  
  1968. enum  {
  1969.     kMovieImportExportOpenSelect = kComponentOpenSelect,
  1970.     kMovieImportExportCloseSelect = kComponentCloseSelect,
  1971.     kMovieImportExportCanDoSelect = kComponentCanDoSelect,
  1972.     kMovieImportExportVersionSelect = kComponentVersionSelect,
  1973.     kMovieImportHandleSelect    = 1,
  1974.     kMovieImportFileSelect        = 2,
  1975.     kMovieImportSetSampleDurationSelect = 3,
  1976.     kMovieImportSetSampleDescriptionSelect = 4,
  1977.     kMovieImportSetMediaFileSelect = 5,
  1978.     kMovieImportSetDimensionsSelect = 6,
  1979.     kMovieImportSetChunkSizeSelect = 7,
  1980.     kMovieImportSetProgressProcSelect = 8,
  1981.     kMovieImportSetAuxiliaryDataSelect = 9,
  1982.     kMovieImportSetFromScrapSelect = 10,
  1983.     kMovieImportDoUserDialogSelect = 11,
  1984.     kMovieImportSetDurationSelect = 12,
  1985.     kMovieImportGetAuxiliaryDataTypeSelect = 13,
  1986.     kMovieImportValidateSelect    = 14,
  1987.     kMovieImportGetFileTypeSelect = 15,
  1988.     kMovieExportToHandleSelect    = 128,
  1989.     kMovieExportToFileSelect    = 129,
  1990.     kMovieExportDoUserDialogSelectOBSOLETE = 130,
  1991.     kMovieExportGetAuxiliaryDataSelect = 131,
  1992.     kMovieExportSetProgressProcSelect = 132,
  1993.     kMovieExportSetSampleDescriptionSelect = 133,
  1994.     kMovieExportDoUserDialogSelect = 134,
  1995.     kMovieExportGetCreatorTypeSelect = 135
  1996. };
  1997.  
  1998. enum  {
  1999.     movieImportCreateTrack        = 1,
  2000.     movieImportInParallel        = 2,
  2001.     movieImportMustUseTrack        = 4
  2002. };
  2003.  
  2004. enum  {
  2005.     movieImportResultUsedMultipleTracks = 8
  2006. };
  2007.  
  2008. #ifdef __cplusplus
  2009. extern "C" {
  2010. #endif
  2011.  
  2012. extern pascal ComponentResult MovieImportHandle(MovieImportComponent ci, Handle dataH, Movie theMovie, Track targetTrack, Track *usedTrack, TimeValue atTime, TimeValue *addedDuration, long inFlags, long *outFlags)
  2013.  FIVEWORDINLINE(0x2F3C, 0x20, 0x1, 0x7000, 0xA82A);
  2014. extern pascal ComponentResult MovieImportFile(MovieImportComponent ci, const FSSpec *theFile, Movie theMovie, Track targetTrack, Track *usedTrack, TimeValue atTime, TimeValue *addedDuration, long inFlags, long *outFlags)
  2015.  FIVEWORDINLINE(0x2F3C, 0x20, 0x2, 0x7000, 0xA82A);
  2016. extern pascal ComponentResult MovieImportSetSampleDuration(MovieImportComponent ci, TimeValue duration, TimeScale scale)
  2017.  FIVEWORDINLINE(0x2F3C, 0x8, 0x3, 0x7000, 0xA82A);
  2018. extern pascal ComponentResult MovieImportSetSampleDescription(MovieImportComponent ci, SampleDescriptionHandle desc, OSType mediaType)
  2019.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  2020. extern pascal ComponentResult MovieImportSetMediaFile(MovieImportComponent ci, AliasHandle alias)
  2021.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2022. extern pascal ComponentResult MovieImportSetDimensions(MovieImportComponent ci, Fixed width, Fixed height)
  2023.  FIVEWORDINLINE(0x2F3C, 0x8, 0x6, 0x7000, 0xA82A);
  2024. extern pascal ComponentResult MovieImportSetChunkSize(MovieImportComponent ci, long chunkSize)
  2025.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  2026. extern pascal ComponentResult MovieImportSetProgressProc(MovieImportComponent ci, MovieProgressUPP proc, long refcon)
  2027.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8, 0x7000, 0xA82A);
  2028. extern pascal ComponentResult MovieImportSetAuxiliaryData(MovieImportComponent ci, Handle data, OSType handleType)
  2029.  FIVEWORDINLINE(0x2F3C, 0x8, 0x9, 0x7000, 0xA82A);
  2030. extern pascal ComponentResult MovieImportSetFromScrap(MovieImportComponent ci, Boolean fromScrap)
  2031.  FIVEWORDINLINE(0x2F3C, 0x2, 0xA, 0x7000, 0xA82A);
  2032. extern pascal ComponentResult MovieImportDoUserDialog(MovieImportComponent ci, const FSSpec *theFile, Handle theData, Boolean *canceled)
  2033.  FIVEWORDINLINE(0x2F3C, 0xC, 0xB, 0x7000, 0xA82A);
  2034. extern pascal ComponentResult MovieImportSetDuration(MovieImportComponent ci, TimeValue duration)
  2035.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  2036. extern pascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent ci, OSType *auxType)
  2037.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  2038. extern pascal ComponentResult MovieImportValidate(MovieImportComponent ci, const FSSpec *theFile, Handle theData, Boolean *valid)
  2039.  FIVEWORDINLINE(0x2F3C, 0xC, 0xE, 0x7000, 0xA82A);
  2040. extern pascal ComponentResult MovieImportGetFileType(MovieImportComponent ci, OSType *fileType)
  2041.  FIVEWORDINLINE(0x2F3C, 0x4, 0xF, 0x7000, 0xA82A);
  2042. extern pascal ComponentResult MovieExportToHandle(MovieExportComponent ci, Handle dataH, Movie theMovie, Track onlyThisTrack, TimeValue startTime, TimeValue duration)
  2043.  FIVEWORDINLINE(0x2F3C, 0x14, 0x80, 0x7000, 0xA82A);
  2044. extern pascal ComponentResult MovieExportToFile(MovieExportComponent ci, const FSSpec *theFile, Movie theMovie, Track onlyThisTrack, TimeValue startTime, TimeValue duration)
  2045.  FIVEWORDINLINE(0x2F3C, 0x14, 0x81, 0x7000, 0xA82A);
  2046. extern pascal ComponentResult MovieExportGetAuxiliaryData(MovieExportComponent ci, Handle dataH, OSType *handleType)
  2047.  FIVEWORDINLINE(0x2F3C, 0x8, 0x83, 0x7000, 0xA82A);
  2048. extern pascal ComponentResult MovieExportSetProgressProc(MovieExportComponent ci, MovieProgressUPP proc, long refcon)
  2049.  FIVEWORDINLINE(0x2F3C, 0x8, 0x84, 0x7000, 0xA82A);
  2050. extern pascal ComponentResult MovieExportSetSampleDescription(MovieExportComponent ci, SampleDescriptionHandle desc, OSType mediaType)
  2051.  FIVEWORDINLINE(0x2F3C, 0x8, 0x85, 0x7000, 0xA82A);
  2052. extern pascal ComponentResult MovieExportDoUserDialog(MovieExportComponent ci, Movie theMovie, Track onlyThisTrack, TimeValue startTime, TimeValue duration, Boolean *canceled)
  2053.  FIVEWORDINLINE(0x2F3C, 0x14, 0x86, 0x7000, 0xA82A);
  2054. extern pascal ComponentResult MovieExportGetCreatorType(MovieExportComponent ci, OSType *creator)
  2055.  FIVEWORDINLINE(0x2F3C, 0x4, 0x87, 0x7000, 0xA82A);
  2056. #if defined(powerc) || defined (__powerc)
  2057. #pragma options align=mac68k
  2058. #endif
  2059. struct TextDisplayData {
  2060.     long                        displayFlags;
  2061.     long                        textJustification;
  2062.     RGBColor                    bgColor;
  2063.     Rect                        textBox;
  2064.     short                        beginHilite;
  2065.     short                        endHilite;
  2066.     RGBColor                    hiliteColor;
  2067.     Boolean                        doHiliteColor;
  2068.     TimeValue                    scrollDelayDur;
  2069.     Point                        dropShadowOffset;
  2070.     short                        dropShadowTransparency;
  2071. };
  2072. #if defined(powerc) || defined(__powerc)
  2073. #pragma options align=reset
  2074. #endif
  2075.  
  2076. typedef struct TextDisplayData TextDisplayData;
  2077.  
  2078. typedef ComponentInstance TextExportComponent;
  2079.  
  2080. extern pascal ComponentResult TextExportGetDisplayData(TextExportComponent ci, TextDisplayData *textDisplay)
  2081.  FIVEWORDINLINE(0x2F3C, 0x4, 0x100, 0x7000, 0xA82A);
  2082. #ifdef __cplusplus
  2083. }
  2084. #endif
  2085.  
  2086. typedef ComponentInstance pnotComponent;
  2087.  
  2088. enum  {
  2089.     pnotComponentWantsEvents    = 1,
  2090.     pnotComponentNeedsNoCache    = 2
  2091. };
  2092.  
  2093. enum  {
  2094.     kPreviewOpenSelector        = 0,
  2095.     kPreviewCloseSelector        = -1,
  2096.     kPreviewCanDoSelector        = -2,
  2097.     kPreviewVersionSelector        = -3,
  2098.     kPreviewShowDataSelector    = 1,
  2099.     kPreviewMakePreviewSelector    = 2,
  2100.     kPreviewMakePreviewReferenceSelector = 3,
  2101.     kPreviewEventSelector        = 4
  2102. };
  2103.  
  2104. #define ShowFilePreviewComponentType 'pnot'
  2105.  
  2106. #define CreateFilePreviewComponentType 'pmak'
  2107.  
  2108. #ifdef __cplusplus
  2109. extern "C" {
  2110. #endif
  2111.  
  2112. extern pascal ComponentResult PreviewShowData(pnotComponent p, OSType dataType, Handle data, const Rect *inHere)
  2113.  FIVEWORDINLINE(0x2F3C, 0xC, 0x1, 0x7000, 0xA82A);
  2114. extern pascal ComponentResult PreviewMakePreview(pnotComponent p, OSType *previewType, Handle *previewResult, const FSSpec *sourceFile, ICMProgressProcRecordPtr progress)
  2115.  FIVEWORDINLINE(0x2F3C, 0x10, 0x2, 0x7000, 0xA82A);
  2116. extern pascal ComponentResult PreviewMakePreviewReference(pnotComponent p, OSType *previewType, short *resID, const FSSpec *sourceFile)
  2117.  FIVEWORDINLINE(0x2F3C, 0xC, 0x3, 0x7000, 0xA82A);
  2118. extern pascal ComponentResult PreviewEvent(pnotComponent p, EventRecord *e, Boolean *handledEvent)
  2119.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  2120. #ifdef __cplusplus
  2121. }
  2122. #endif
  2123.  
  2124. typedef pascal void (*DataHCompletionProcPtr)(Ptr request, long refcon, OSErr err);
  2125.  
  2126. enum {
  2127.     uppDataHCompletionProcInfo = kPascalStackBased
  2128.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Ptr)))
  2129.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  2130.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(OSErr)))
  2131. };
  2132.  
  2133. #if USESROUTINEDESCRIPTORS
  2134. typedef UniversalProcPtr DataHCompletionUPP;
  2135.  
  2136. #define CallDataHCompletionProc(userRoutine, request, refcon, err)        \
  2137.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDataHCompletionProcInfo, (request), (refcon), (err))
  2138. #define NewDataHCompletionProc(userRoutine)        \
  2139.         (DataHCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDataHCompletionProcInfo, GetCurrentISA())
  2140. #else
  2141. typedef DataHCompletionProcPtr DataHCompletionUPP;
  2142.  
  2143. #define CallDataHCompletionProc(userRoutine, request, refcon, err)        \
  2144.         (*(userRoutine))((request), (refcon), (err))
  2145. #define NewDataHCompletionProc(userRoutine)        \
  2146.         (DataHCompletionUPP)(userRoutine)
  2147. #endif
  2148.  
  2149. enum  {
  2150.     kDataHCanRead                = 1L << 0,
  2151.     kDataHSpecialRead            = 1L << 1,
  2152.     kDataHSpecialReadFile        = 1L << 2,
  2153.     kDataHCanWrite                = 1L << 3,
  2154.     kDataHSpecialWrite            = 1 << 4,
  2155.     kDataHSpecialWriteFile        = 1 << 5,
  2156.     kDataHCanStreamingWrite        = 1 << 6,
  2157.     kDataHMustCheckDataRef        = 1 << 7
  2158. };
  2159.  
  2160. #if defined(powerc) || defined (__powerc)
  2161. #pragma options align=mac68k
  2162. #endif
  2163. struct DataHVolumeListRecord {
  2164.     short                        vRefNum;
  2165.     long                        flags;
  2166. };
  2167. #if defined(powerc) || defined(__powerc)
  2168. #pragma options align=reset
  2169. #endif
  2170.  
  2171. typedef struct DataHVolumeListRecord DataHVolumeListRecord;
  2172.  
  2173. typedef DataHVolumeListRecord *DataHVolumeListPtr;
  2174.  
  2175. typedef DataHVolumeListPtr *DataHVolumeList;
  2176.  
  2177. #define kDataHExtendedSchedule 'xtnd'
  2178.  
  2179. #if defined(powerc) || defined (__powerc)
  2180. #pragma options align=mac68k
  2181. #endif
  2182. struct DataHScheduleRecord {
  2183.     TimeRecord                    timeNeededBy;
  2184.     long                        extendedID;
  2185.     long                        extendedVers;
  2186.     Fixed                        priority;
  2187. };
  2188. #if defined(powerc) || defined(__powerc)
  2189. #pragma options align=reset
  2190. #endif
  2191.  
  2192. typedef struct DataHScheduleRecord DataHScheduleRecord;
  2193.  
  2194. typedef DataHScheduleRecord *DataHSchedulePtr;
  2195.  
  2196. extern pascal ComponentResult DataHGetData(DataHandler dh, Handle h, long hOffset, long offset, long size)
  2197.  FIVEWORDINLINE(0x2F3C, 0x10, 0x2, 0x7000, 0xA82A);
  2198. extern pascal ComponentResult DataHPutData(DataHandler dh, Handle h, long hOffset, long *offset, long size)
  2199.  FIVEWORDINLINE(0x2F3C, 0x10, 0x3, 0x7000, 0xA82A);
  2200. extern pascal ComponentResult DataHFlushData(DataHandler dh)
  2201.  FIVEWORDINLINE(0x2F3C, 0, 0x4, 0x7000, 0xA82A);
  2202. extern pascal ComponentResult DataHOpenForWrite(DataHandler dh)
  2203.  FIVEWORDINLINE(0x2F3C, 0, 0x5, 0x7000, 0xA82A);
  2204. extern pascal ComponentResult DataHCloseForWrite(DataHandler dh)
  2205.  FIVEWORDINLINE(0x2F3C, 0, 0x6, 0x7000, 0xA82A);
  2206. extern pascal ComponentResult DataHOpenForRead(DataHandler dh)
  2207.  FIVEWORDINLINE(0x2F3C, 0, 0x8, 0x7000, 0xA82A);
  2208. extern pascal ComponentResult DataHCloseForRead(DataHandler dh)
  2209.  FIVEWORDINLINE(0x2F3C, 0, 0x9, 0x7000, 0xA82A);
  2210. extern pascal ComponentResult DataHSetDataRef(DataHandler dh, Handle dataRef)
  2211.  FIVEWORDINLINE(0x2F3C, 0x4, 0xA, 0x7000, 0xA82A);
  2212. extern pascal ComponentResult DataHGetDataRef(DataHandler dh, Handle *dataRef)
  2213.  FIVEWORDINLINE(0x2F3C, 0x4, 0xB, 0x7000, 0xA82A);
  2214. extern pascal ComponentResult DataHCompareDataRef(DataHandler dh, Handle dataRef, Boolean *equal)
  2215.  FIVEWORDINLINE(0x2F3C, 0x8, 0xC, 0x7000, 0xA82A);
  2216. extern pascal ComponentResult DataHTask(DataHandler dh)
  2217.  FIVEWORDINLINE(0x2F3C, 0, 0xD, 0x7000, 0xA82A);
  2218. extern pascal ComponentResult DataHScheduleData(DataHandler dh, Ptr PlaceToPutDataPtr, long FileOffset, long DataSize, long RefCon, DataHSchedulePtr scheduleRec, DataHCompletionUPP CompletionRtn)
  2219.  FIVEWORDINLINE(0x2F3C, 0x18, 0xE, 0x7000, 0xA82A);
  2220. extern pascal ComponentResult DataHFinishData(DataHandler dh, Ptr PlaceToPutDataPtr, Boolean Cancel)
  2221.  FIVEWORDINLINE(0x2F3C, 0x6, 0xF, 0x7000, 0xA82A);
  2222. extern pascal ComponentResult DataHFlushCache(DataHandler dh)
  2223.  FIVEWORDINLINE(0x2F3C, 0, 0x10, 0x7000, 0xA82A);
  2224. extern pascal ComponentResult DataHResolveDataRef(DataHandler dh, Handle theDataRef, Boolean *wasChanged, Boolean userInterfaceAllowed)
  2225.  FIVEWORDINLINE(0x2F3C, 0xA, 0x11, 0x7000, 0xA82A);
  2226. extern pascal ComponentResult DataHGetFileSize(DataHandler dh, long *fileSize)
  2227.  FIVEWORDINLINE(0x2F3C, 0x4, 0x12, 0x7000, 0xA82A);
  2228. extern pascal ComponentResult DataHCanUseDataRef(DataHandler dh, Handle dataRef, long *useFlags)
  2229.  FIVEWORDINLINE(0x2F3C, 0x8, 0x13, 0x7000, 0xA82A);
  2230. extern pascal ComponentResult DataHGetVolumeList(DataHandler dh, DataHVolumeList *volumeList)
  2231.  FIVEWORDINLINE(0x2F3C, 0x4, 0x14, 0x7000, 0xA82A);
  2232. extern pascal ComponentResult DataHWrite(DataHandler dh, Ptr data, long offset, long size, DataHCompletionUPP completion, long refCon)
  2233.  FIVEWORDINLINE(0x2F3C, 0x14, 0x15, 0x7000, 0xA82A);
  2234. extern pascal ComponentResult DataHPreextend(DataHandler dh, long maxToAdd, long *spaceAdded)
  2235.  FIVEWORDINLINE(0x2F3C, 0x8, 0x16, 0x7000, 0xA82A);
  2236. extern pascal ComponentResult DataHSetFileSize(DataHandler dh, long fileSize)
  2237.  FIVEWORDINLINE(0x2F3C, 0x4, 0x17, 0x7000, 0xA82A);
  2238. extern pascal ComponentResult DataHGetFreeSpace(DataHandler dh, unsigned long *freeSize)
  2239.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  2240. extern pascal ComponentResult DataHCreateFile(DataHandler dh, OSType creator, Boolean deleteExisting)
  2241.  FIVEWORDINLINE(0x2F3C, 0x6, 0x19, 0x7000, 0xA82A);
  2242. extern pascal ComponentResult DataHGetPreferredBlockSize(DataHandler dh, long *blockSize)
  2243.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1A, 0x7000, 0xA82A);
  2244. extern pascal ComponentResult DataHGetDeviceIndex(DataHandler dh, long *deviceIndex)
  2245.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1B, 0x7000, 0xA82A);
  2246. extern pascal ComponentResult DataHIsStreamingDataHandler(DataHandler dh, Boolean *yes)
  2247.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1C, 0x7000, 0xA82A);
  2248. extern pascal ComponentResult DataHGetDataInBuffer(DataHandler dh, long startOffset, long *size)
  2249.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1D, 0x7000, 0xA82A);
  2250. extern pascal ComponentResult DataHGetScheduleAheadTime(DataHandler dh, long *millisecs)
  2251.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  2252. extern pascal ComponentResult DataHPlaybackHints(DataHandler dh, long flags, unsigned long minFileOffset, unsigned long maxFileOffset, long bytesPerSecond)
  2253.  FIVEWORDINLINE(0x2F3C, 0x10, 0x103, 0x7000, 0xA82A);
  2254. enum  {
  2255.     kDataHGetDataSelect            = 0x2,
  2256.     kDataHPutDataSelect            = 0x3,
  2257.     kDataHFlushDataSelect        = 0x4,
  2258.     kDataHOpenForWriteSelect    = 0x5,
  2259.     kDataHCloseForWriteSelect    = 0x6,
  2260.     kDataHOpenForReadSelect        = 0x8,
  2261.     kDataHCloseForReadSelect    = 0x9,
  2262.     kDataHSetDataRefSelect        = 0xA,
  2263.     kDataHGetDataRefSelect        = 0xB,
  2264.     kDataHCompareDataRefSelect    = 0xC,
  2265.     kDataHTaskSelect            = 0xD,
  2266.     kDataHScheduleDataSelect    = 0xE,
  2267.     kDataHFinishDataSelect        = 0xF,
  2268.     kDataHFlushCacheSelect        = 0x10,
  2269.     kDataHResolveDataRefSelect    = 0x11,
  2270.     kDataHGetFileSizeSelect        = 0x12,
  2271.     kDataHCanUseDataRefSelect    = 0x13,
  2272.     kDataHGetVolumeListSelect    = 0x14,
  2273.     kDataHWriteSelect            = 0x15,
  2274.     kDataHPreextendSelect        = 0x16,
  2275.     kDataHSetFileSizeSelect        = 0x17,
  2276.     kDataHGetFreeSpaceSelect    = 0x18,
  2277.     kDataHCreateFileSelect        = 0x19,
  2278.     kDataHGetPreferredBlockSizeSelect = 0x1A,
  2279.     kDataHGetDeviceIndexSelect    = 0x1B,
  2280.     kDataHIsStreamingDataHandlerSelect = 0x1C,
  2281.     kDataHGetDataInBufferSelect    = 0x1D,
  2282.     kDataHGetScheduleAheadTimeSelect = 0x1E,
  2283.     kDataHPlaybackHintsSelect    = 0x103
  2284. };
  2285.  
  2286. #define kMusicComponentType 'musi'
  2287.  
  2288. typedef ComponentInstance MusicComponent;
  2289.  
  2290. enum  {
  2291.     kSynthesizerDynamicVoice    = 1,
  2292.     kSynthesizerUsesMIDIPort    = 2,
  2293.     kSynthesizerMicrotone        = 4,
  2294.     kSynthesizerLimitedMicrotone = 8,
  2295.     kSynthesizerMixedDrums        = 16,
  2296.     kSynthesizerSoftware        = 32,
  2297.     kSynthesizerGMSuperset        = 8192,
  2298.     kSynthesizerGM                = 16384
  2299. };
  2300.  
  2301. enum MusicControllers {
  2302.     kControllerModulationWheel    = 1,
  2303.     kControllerBreath            = 2,
  2304.     kControllerFoot                = 4,
  2305.     kControllerPortamentoTime    = 5,
  2306.     kControllerVolume            = 7,
  2307.     kControllerBalance            = 8,
  2308.     kControllerPan                = 10,
  2309.     kControllerExpression        = 11,
  2310.     kControllerPitchBend        = 32,
  2311.     kControllerAfterTouch        = 33,
  2312.     kControllerSustain            = 64,
  2313.     kControllerPortamento        = 65,
  2314.     kControllerSostenuto        = 66,
  2315.     kControllerSoftPedal        = 67,
  2316.     kControllerReverb            = 91,
  2317.     kControllerTremolo            = 92,
  2318.     kControllerChorus            = 93,
  2319.     kControllerCeleste            = 94,
  2320.     kControllerPhaser            = 95
  2321. };
  2322.  
  2323. #define kControllerMaximum 0x7FFF
  2324.  
  2325. #define kControllerMinimum 0x8000
  2326.  
  2327. #if defined(powerc) || defined (__powerc)
  2328. #pragma options align=mac68k
  2329. #endif
  2330. struct SynthesizerDescription {
  2331.     OSType                        type;
  2332.     Str31                        name;
  2333.     unsigned long                flags;
  2334.     unsigned long                voiceCount;
  2335.     unsigned long                partCount;
  2336.     unsigned long                instrumentCount;
  2337.     unsigned long                modifiableInstrumentCount;
  2338.     unsigned long                channelMask;
  2339.     unsigned long                drumPartCount;
  2340.     unsigned long                drumCount;
  2341.     unsigned long                modifiableDrumCount;
  2342.     unsigned long                drumChannelMask;
  2343.     unsigned long                outputCount;
  2344.     unsigned long                latency;
  2345.     unsigned long                controllers[4];
  2346.     unsigned long                gmInstruments[4];
  2347.     unsigned long                gmDrums[4];
  2348. };
  2349. #if defined(powerc) || defined(__powerc)
  2350. #pragma options align=reset
  2351. #endif
  2352.  
  2353. typedef struct SynthesizerDescription SynthesizerDescription;
  2354.  
  2355. #define kVoiceCountDynamic -1
  2356.  
  2357. #if defined(powerc) || defined (__powerc)
  2358. #pragma options align=mac68k
  2359. #endif
  2360. struct ToneDescription {
  2361.     OSType                        synthesizerType;
  2362.     Str31                        synthesizerName;
  2363.     Str31                        instrumentName;
  2364.     long                        instrumentNumber;
  2365.     long                        gmNumber;
  2366. };
  2367. #if defined(powerc) || defined(__powerc)
  2368. #pragma options align=reset
  2369. #endif
  2370.  
  2371. typedef struct ToneDescription ToneDescription;
  2372.  
  2373. #define kFirstDrumkit 16384
  2374.  
  2375. #define kLastDrumkit (kFirstDrumkit+128)
  2376.  
  2377. enum  {
  2378.     kInstrumentMatchSynthesizerType = 1,
  2379.     kInstrumentMatchSynthesizerName = 2,
  2380.     kInstrumentMatchName        = 4,
  2381.     kInstrumentMatchNumber        = 8,
  2382.     kInstrumentMatchGMNumber    = 16
  2383. };
  2384.  
  2385. enum  {
  2386.     kKnobRealtime                = 1,
  2387.     kKnobNextNote                = 2,
  2388.     kKnobAction                    = 4,
  2389.     kKnobNotInstrument            = 8,
  2390.     kKnobAffectsOthers            = 16,
  2391.     kKnobMinorGroupStart        = 64,
  2392.     kKnobGroupStart                = 128,
  2393.     kKnobTypeNumber                = 0 << 12,
  2394.     kKnobTypeBoolean            = 1 << 12,
  2395.     kKnobTypeNote                = 2 << 12,
  2396.     kKnobTypePan                = 3 << 12,
  2397.     kKnobTypeInstrument            = 4 << 12,
  2398.     kKnobTypeSetting            = 5 << 12
  2399. };
  2400.  
  2401. #define kUnknownKnobValue 0x7FFFFFFF
  2402.  
  2403. #if defined(powerc) || defined (__powerc)
  2404. #pragma options align=mac68k
  2405. #endif
  2406. struct KnobDescription {
  2407.     Str31                        name;
  2408.     long                        lowValue;
  2409.     long                        highValue;
  2410.     long                        defaultValue;
  2411.     long                        flags;
  2412. };
  2413. #if defined(powerc) || defined(__powerc)
  2414. #pragma options align=reset
  2415. #endif
  2416.  
  2417. typedef struct KnobDescription KnobDescription;
  2418.  
  2419. #if defined(powerc) || defined (__powerc)
  2420. #pragma options align=mac68k
  2421. #endif
  2422. struct InstrumentData {
  2423.     ToneDescription                tone;
  2424.     long                        knobCount;
  2425.     long                        knob[1];
  2426. };
  2427. #if defined(powerc) || defined(__powerc)
  2428. #pragma options align=reset
  2429. #endif
  2430.  
  2431. typedef struct InstrumentData InstrumentData;
  2432.  
  2433. typedef InstrumentData **InstrumentDataHandle;
  2434.  
  2435. #if defined(powerc) || defined (__powerc)
  2436. #pragma options align=mac68k
  2437. #endif
  2438. struct FlatInstrument {
  2439.     ToneDescription                tone;
  2440.     long                        size;
  2441.     unsigned char                data[4];
  2442. };
  2443. #if defined(powerc) || defined(__powerc)
  2444. #pragma options align=reset
  2445. #endif
  2446.  
  2447. typedef struct FlatInstrument FlatInstrument;
  2448.  
  2449. #if defined(powerc) || defined (__powerc)
  2450. #pragma options align=mac68k
  2451. #endif
  2452. struct InstrumentAboutInfo {
  2453.     PicHandle                    p;
  2454.     Str255                        author;
  2455.     Str255                        copyright;
  2456.     Str255                        other;
  2457. };
  2458. #if defined(powerc) || defined(__powerc)
  2459. #pragma options align=reset
  2460. #endif
  2461.  
  2462. typedef struct InstrumentAboutInfo InstrumentAboutInfo;
  2463.  
  2464. #if defined(powerc) || defined (__powerc)
  2465. #pragma options align=mac68k
  2466. #endif
  2467. struct MusicMIDIPacket {
  2468.     unsigned short                length;
  2469.     unsigned long                reserved;
  2470.     unsigned char                data[249];
  2471. };
  2472. #if defined(powerc) || defined(__powerc)
  2473. #pragma options align=reset
  2474. #endif
  2475.  
  2476. typedef struct MusicMIDIPacket MusicMIDIPacket;
  2477.  
  2478. typedef pascal ComponentResult (*MusicMIDISendProcPtr)(MusicComponent self, long refCon, MusicMIDIPacket *mmp);
  2479.  
  2480. enum  {
  2481.     kMusicFirstSelect            = 0,
  2482.     kMusicGetDescriptionSelect,
  2483.     kMusicGetPartSelect,
  2484.     kMusicSetPartSelect,
  2485.     kMusicSetInstrumentNumberSelect,
  2486.     kMusicGetInstrumentNumberSelect,
  2487.     kMusicStoreInstrumentSelect,
  2488.     kMusicGetInstrumentSelect,
  2489.     kMusicSetInstrumentSelect,
  2490.     kMusicDummyOne,
  2491.     kMusicDummyTwo,
  2492.     kMusicGetInstrumentKnobDescriptionSelect,
  2493.     kMusicGetDrumKnobDescriptionSelect,
  2494.     kMusicGetKnobDescriptionSelect,
  2495.     kMusicGetPartKnobSelect,
  2496.     kMusicSetPartKnobSelect,
  2497.     kMusicGetKnobSelect,
  2498.     kMusicSetKnobSelect,
  2499.     kMusicGetPartNameSelect,
  2500.     kMusicSetPartNameSelect,
  2501.     kMusicFindToneSelect,
  2502.     kMusicPlayNoteSelect,
  2503.     kMusicResetPartSelect,
  2504.     kMusicSetControllerSelect,
  2505.     kMusicGetControllerSelect,
  2506.     kMusicGetMIDIProcSelect,
  2507.     kMusicSetMIDIProcSelect,
  2508.     kMusicGetInstrumentNamesSelect,
  2509.     kMusicGetDrumNamesSelect,
  2510.     kMusicGetMasterTuneSelect,
  2511.     kMusicSetMasterTuneSelect,
  2512.     kMusicSetFlatInstrumentSelect,
  2513.     kMusicGetInstrumentAboutInfoSelect
  2514. };
  2515.  
  2516. #define MusicError(x) (0x80000000 | ((unsigned short)(-2100 - x)) )
  2517.  
  2518. #define notImplementedMusicErr MusicError(1)
  2519.  
  2520. #define cantSendToSynthesizerErr MusicError(2)
  2521.  
  2522. #define cantReceiveFromSynthesizerErr MusicError(3)
  2523.  
  2524. #define illegalVoiceAllocationErr MusicError(4)
  2525.  
  2526. #define illegalPartErr MusicError(5)
  2527.  
  2528. #define illegalChannelErr MusicError(6)
  2529.  
  2530. #define illegalKnobErr MusicError(7)
  2531.  
  2532. #define illegalKnobValueErr MusicError(8)
  2533.  
  2534. #define illegalInstrumentErr MusicError(9)
  2535.  
  2536. #define illegalControllerErr MusicError(10)
  2537.  
  2538. #define midiManagerAbsentErr MusicError(11)
  2539.  
  2540. #define synthesizerNotRespondingErr MusicError(12)
  2541.  
  2542. #define synthesizerErr MusicError(13)
  2543.  
  2544. #define illegalNoteChannelErr MusicError(14)
  2545.  
  2546. #define noteChannelNotAllocatedErr MusicError(15)
  2547.  
  2548. #define tunePlayerFullErr MusicError(16)
  2549.  
  2550. #define tuneParseErr MusicError(17)
  2551.  
  2552. #define kGMType 'gm  '
  2553.  
  2554. extern pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  2555.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2, 0x7000, 0xA82A);
  2556. extern pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  2557.  FIVEWORDINLINE(0x2F3C, 0xC, 0x3, 0x7000, 0xA82A);
  2558. extern pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  2559.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1, 0x7000, 0xA82A);
  2560. extern pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  2561.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20, 0x7000, 0xA82A);
  2562. extern pascal ComponentResult MusicSetInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  2563.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  2564. extern pascal ComponentResult MusicGetInstrumentNumber(MusicComponent mc, long part)
  2565.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2566. extern pascal ComponentResult MusicStoreInstrument(MusicComponent mc, long part, long instrumentNumber)
  2567.  FIVEWORDINLINE(0x2F3C, 0x8, 0x6, 0x7000, 0xA82A);
  2568. extern pascal ComponentResult MusicGetInstrument(MusicComponent mc, long part, InstrumentDataHandle *iH)
  2569.  FIVEWORDINLINE(0x2F3C, 0x8, 0x7, 0x7000, 0xA82A);
  2570. extern pascal ComponentResult MusicSetInstrument(MusicComponent mc, long part, InstrumentDataHandle iH)
  2571.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8, 0x7000, 0xA82A);
  2572. extern pascal ComponentResult MusicSetFlatInstrument(MusicComponent mc, long part, FlatInstrument *flatInstrument)
  2573.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1F, 0x7000, 0xA82A);
  2574. extern pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobNumber, KnobDescription *mkd)
  2575.  FIVEWORDINLINE(0x2F3C, 0x8, 0xB, 0x7000, 0xA82A);
  2576. extern pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobNumber, KnobDescription *mkd)
  2577.  FIVEWORDINLINE(0x2F3C, 0x8, 0xC, 0x7000, 0xA82A);
  2578. extern pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobNumber)
  2579.  FIVEWORDINLINE(0x2F3C, 0x8, 0xE, 0x7000, 0xA82A);
  2580. extern pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobNumber, long knobValue)
  2581.  FIVEWORDINLINE(0x2F3C, 0xC, 0xF, 0x7000, 0xA82A);
  2582. extern pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobNumber, KnobDescription *mkd)
  2583.  FIVEWORDINLINE(0x2F3C, 0x8, 0xD, 0x7000, 0xA82A);
  2584. extern pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobNumber)
  2585.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10, 0x7000, 0xA82A);
  2586. extern pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobNumber, long knobValue)
  2587.  FIVEWORDINLINE(0x2F3C, 0x8, 0x11, 0x7000, 0xA82A);
  2588. extern pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, Str31 name)
  2589.  FIVEWORDINLINE(0x2F3C, 0x8, 0x12, 0x7000, 0xA82A);
  2590. extern pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, Str31 name)
  2591.  FIVEWORDINLINE(0x2F3C, 0x8, 0x13, 0x7000, 0xA82A);
  2592. extern pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *instrumentNumber, unsigned long *fit)
  2593.  FIVEWORDINLINE(0x2F3C, 0xC, 0x14, 0x7000, 0xA82A);
  2594. extern pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  2595.  FIVEWORDINLINE(0x2F3C, 0x10, 0x1B, 0x7000, 0xA82A);
  2596. extern pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  2597.  FIVEWORDINLINE(0x2F3C, 0xC, 0x1C, 0x7000, 0xA82A);
  2598. extern pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  2599.  FIVEWORDINLINE(0x2F3C, 0xC, 0x15, 0x7000, 0xA82A);
  2600. extern pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  2601.  FIVEWORDINLINE(0x2F3C, 0x4, 0x16, 0x7000, 0xA82A);
  2602. extern pascal ComponentResult MusicSetController(MusicComponent mc, long part, long controllerNumber, long controllerValue)
  2603.  FIVEWORDINLINE(0x2F3C, 0xC, 0x17, 0x7000, 0xA82A);
  2604. extern pascal ComponentResult MusicGetController(MusicComponent mc, long part, long controllerNumber)
  2605.  FIVEWORDINLINE(0x2F3C, 0x8, 0x18, 0x7000, 0xA82A);
  2606. extern pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendProcPtr *midiSendProc, long *refCon)
  2607.  FIVEWORDINLINE(0x2F3C, 0x8, 0x19, 0x7000, 0xA82A);
  2608. extern pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendProcPtr midiSendProc, long refCon)
  2609.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1A, 0x7000, 0xA82A);
  2610. extern pascal ComponentResult MusicSetMasterTune(MusicComponent mc, Fixed masterTune)
  2611.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  2612. extern pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  2613.  FIVEWORDINLINE(0x2F3C, 0, 0x1D, 0x7000, 0xA82A);
  2614. typedef struct privateNoteChannel *NoteChannel;
  2615.  
  2616. #if defined(powerc) || defined (__powerc)
  2617. #pragma options align=mac68k
  2618. #endif
  2619. struct SynthesizerConnections {
  2620.     OSType                        clientID;
  2621.     OSType                        inputPortID;
  2622.     OSType                        outputPortID;
  2623.     long                        midiChannel;
  2624.     long                        flags;
  2625.     long                        reserved[3];
  2626. };
  2627. #if defined(powerc) || defined(__powerc)
  2628. #pragma options align=reset
  2629. #endif
  2630.  
  2631. typedef struct SynthesizerConnections SynthesizerConnections;
  2632.  
  2633. #if defined(powerc) || defined (__powerc)
  2634. #pragma options align=mac68k
  2635. #endif
  2636. struct NoteRequest {
  2637.     long                        polyphony;
  2638.     Fixed                        typicalPolyphony;
  2639.     ToneDescription                tone;
  2640. };
  2641. #if defined(powerc) || defined(__powerc)
  2642. #pragma options align=reset
  2643. #endif
  2644.  
  2645. typedef struct NoteRequest NoteRequest;
  2646.  
  2647. enum  {
  2648.     kNAFirstSelector            = -7,
  2649.     kNATargetSelect,
  2650.     kNARegisterSelect,
  2651.     kNAVersionSelect,
  2652.     kNACanDoSelect,
  2653.     kNACloseSelect,
  2654.     kNAOpenSelect,
  2655.     kNARegisterMusicDeviceSelect,
  2656.     kNAUnregisterMusicDeviceSelect,
  2657.     kNAGetRegisteredMusicDeviceSelect,
  2658.     kNASaveMusicConfigurationSelect,
  2659.     kNANewNoteChannelSelect,
  2660.     kNADisposeNoteChannelSelect,
  2661.     kNAGetNoteChannelInfoSelect,
  2662.     kNAPrerollNoteChannelSelect,
  2663.     kNAUnrollNoteChannelSelect,
  2664.     kNAEngageNoteChannelSelect,
  2665.     kNADisengageNoteChannelSelect,
  2666.     kNASetNoteChannelVolumeSelect,
  2667.     kNAResetNoteChannelSelect,
  2668.     kNAPlayNoteSelect,
  2669.     kNASetControllerSelect,
  2670.     kNASetKnobSelect,
  2671.     kNAFindNoteChannelToneSelect,
  2672.     kNASetNoteChannelInstrumentSelect,
  2673.     kNAPickInstrumentSelect,
  2674.     kNAPickArrangementSelect,
  2675.     kNAGetStatusBlockSelect,
  2676.     kNASetDefaultMIDIInputSelect,
  2677.     kNAGetDefaultMIDIInputSelect,
  2678.     kNAGetNoteChannelStateSelect,
  2679.     kNASetNoteChannelStateSelect,
  2680.     kNAUseDefaultMIDIInputSelect,
  2681.     kNALoseDefaultMIDIInputSelect,
  2682.     kNAStuffToneDescriptionSelect,
  2683.     kNACopyrightDialogSelect,
  2684.     kNASetFlatInstrumentSelect,
  2685.     kNASetInstrumentSelect,
  2686.     kNALastSelector
  2687. };
  2688.  
  2689. #undef NAComponentCall
  2690. #undef NAComponentError
  2691. typedef ComponentInstance NoteAllocator;
  2692.  
  2693. enum  {
  2694.     kPickDontMix                = 1,
  2695.     kPickSameSynth                = 2
  2696. };
  2697.  
  2698. typedef pascal ComponentResult (*MusicMIDIReadHookProcPtr)(MusicMIDIPacket *mp, long myRefCon);
  2699.  
  2700. enum {
  2701.     uppMusicMIDIReadHookProcInfo = kPascalStackBased
  2702.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  2703.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MusicMIDIPacket*)))
  2704.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  2705. };
  2706.  
  2707. #if USESROUTINEDESCRIPTORS
  2708. typedef UniversalProcPtr MusicMIDIReadHookUPP;
  2709.  
  2710. #define CallMusicMIDIReadHookProc(userRoutine, mp, myRefCon)        \
  2711.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicMIDIReadHookProcInfo, (mp), (myRefCon))
  2712. #define NewMusicMIDIReadHookProc(userRoutine)        \
  2713.         (MusicMIDIReadHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicMIDIReadHookProcInfo, GetCurrentISA())
  2714. #else
  2715. typedef MusicMIDIReadHookProcPtr MusicMIDIReadHookUPP;
  2716.  
  2717. #define CallMusicMIDIReadHookProc(userRoutine, mp, myRefCon)        \
  2718.         (*(userRoutine))((mp), (myRefCon))
  2719. #define NewMusicMIDIReadHookProc(userRoutine)        \
  2720.         (MusicMIDIReadHookUPP)(userRoutine)
  2721. #endif
  2722.  
  2723. #define kNoteAllocatorType 'nota'
  2724.  
  2725. extern pascal ComponentResult NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name, SynthesizerConnections *connections)
  2726.  FIVEWORDINLINE(0x2F3C, 0xC, 0, 0x7000, 0xA82A);
  2727. extern pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator na, long index)
  2728.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1, 0x7000, 0xA82A);
  2729. extern pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  2730.  FIVEWORDINLINE(0x2F3C, 0x14, 0x2, 0x7000, 0xA82A);
  2731. extern pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  2732.  FIVEWORDINLINE(0x2F3C, 0x4, 0x15, 0x7000, 0xA82A);
  2733. extern pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  2734.  FIVEWORDINLINE(0x2F3C, 0x4, 0x16, 0x7000, 0xA82A);
  2735. extern pascal ComponentResult NASaveMusicConfiguration(NoteAllocator na)
  2736.  FIVEWORDINLINE(0x2F3C, 0, 0x3, 0x7000, 0xA82A);
  2737. extern pascal ComponentResult NANewNoteChannel(NoteAllocator na, NoteRequest *noteRequest, NoteChannel *outChannel)
  2738.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  2739. extern pascal ComponentResult NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2740.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2741. extern pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index, long *part)
  2742.  FIVEWORDINLINE(0x2F3C, 0xC, 0x6, 0x7000, 0xA82A);
  2743. extern pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator na, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  2744.  FIVEWORDINLINE(0x2F3C, 0xC, 0x19, 0x7000, 0xA82A);
  2745. extern pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator na)
  2746.  FIVEWORDINLINE(0x2F3C, 0, 0x1A, 0x7000, 0xA82A);
  2747. extern pascal ComponentResult NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2748.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  2749. extern pascal ComponentResult NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2750.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8, 0x7000, 0xA82A);
  2751. extern pascal ComponentResult NAEngageNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2752.  FIVEWORDINLINE(0x2F3C, 0x4, 0x9, 0x7000, 0xA82A);
  2753. extern pascal ComponentResult NADisengageNoteChannel(NoteAllocator na, NoteChannel noteChannel, long silenceNotes)
  2754.  FIVEWORDINLINE(0x2F3C, 0x8, 0xA, 0x7000, 0xA82A);
  2755. extern pascal ComponentResult NAGetNoteChannelState(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber, Handle *state)
  2756.  FIVEWORDINLINE(0x2F3C, 0xC, 0x17, 0x7000, 0xA82A);
  2757. extern pascal ComponentResult NASetNoteChannelState(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber, Handle state)
  2758.  FIVEWORDINLINE(0x2F3C, 0xC, 0x18, 0x7000, 0xA82A);
  2759. extern pascal ComponentResult NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2760.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  2761. extern pascal ComponentResult NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume)
  2762.  FIVEWORDINLINE(0x2F3C, 0x8, 0xB, 0x7000, 0xA82A);
  2763. extern pascal ComponentResult NASetInstrument(NoteAllocator na, NoteChannel noteChannel, InstrumentData *instrumentData)
  2764.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1E, 0x7000, 0xA82A);
  2765. extern pascal ComponentResult NASetFlatInstrument(NoteAllocator na, NoteChannel noteChannel, FlatInstrument *flatInstrument)
  2766.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1D, 0x7000, 0xA82A);
  2767. extern pascal ComponentResult NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity)
  2768.  FIVEWORDINLINE(0x2F3C, 0xC, 0xD, 0x7000, 0xA82A);
  2769. extern pascal ComponentResult NASetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  2770.  FIVEWORDINLINE(0x2F3C, 0xC, 0xE, 0x7000, 0xA82A);
  2771. extern pascal ComponentResult NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long knobValue)
  2772.  FIVEWORDINLINE(0x2F3C, 0xC, 0xF, 0x7000, 0xA82A);
  2773. extern pascal ComponentResult NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  2774.  FIVEWORDINLINE(0x2F3C, 0xC, 0x10, 0x7000, 0xA82A);
  2775. extern pascal ComponentResult NASetNoteChannelInstrument(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  2776.  FIVEWORDINLINE(0x2F3C, 0x8, 0x11, 0x7000, 0xA82A);
  2777. extern pascal ComponentResult NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, Ptr *flatList, long *flatChoiceIndex)
  2778.  FIVEWORDINLINE(0x2F3C, 0x1C, 0x12, 0x7000, 0xA82A);
  2779. extern pascal ComponentResult NAStuffToneDescription(NoteAllocator na, long gmNumber, ToneDescription *td)
  2780.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1B, 0x7000, 0xA82A);
  2781. extern pascal ComponentResult NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long partCount, NoteRequest *noteRequestList, Track t, StringPtr songName)
  2782.  FIVEWORDINLINE(0x2F3C, 0x18, 0x13, 0x7000, 0xA82A);
  2783. extern pascal ComponentResult NACopyrightDialog(NoteAllocator na, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  2784.  FIVEWORDINLINE(0x2F3C, 0x1C, 0x1C, 0x7000, 0xA82A);
  2785. #if defined(powerc) || defined (__powerc)
  2786. #pragma options align=mac68k
  2787. #endif
  2788. struct NAStatPiece {
  2789.     Str31                        clientName;
  2790.     Str31                        synthesizerName;
  2791.     long                        part;
  2792.     long                        midiChannel;
  2793.     long                        polyphony;
  2794.     long                        valid;
  2795. };
  2796. #if defined(powerc) || defined(__powerc)
  2797. #pragma options align=reset
  2798. #endif
  2799.  
  2800. typedef struct NAStatPiece NAStatPiece;
  2801.  
  2802. #if defined(powerc) || defined (__powerc)
  2803. #pragma options align=mac68k
  2804. #endif
  2805. struct NAStat {
  2806.     long                        pieceCount;
  2807.     NAStatPiece                    piece[64];
  2808. };
  2809. #if defined(powerc) || defined(__powerc)
  2810. #pragma options align=reset
  2811. #endif
  2812.  
  2813. typedef struct NAStat NAStat;
  2814.  
  2815. extern pascal ComponentResult NAGetStatusBlock(NoteAllocator na, NAStat *stat)
  2816.  FIVEWORDINLINE(0x2F3C, 0x4, 0x14, 0x7000, 0xA82A);
  2817. #define kTuneQueueDepth 8
  2818.  
  2819. #if defined(powerc) || defined (__powerc)
  2820. #pragma options align=mac68k
  2821. #endif
  2822. struct TuneStatus {
  2823.     unsigned long                *tune;
  2824.     unsigned long                *tunePtr;
  2825.     TimeValue                    time;
  2826.     short                        queueCount;
  2827.     short                        queueSpots;
  2828.     TimeValue                    queueTime;
  2829.     long                        reserved[3];
  2830. };
  2831. #if defined(powerc) || defined(__powerc)
  2832. #pragma options align=reset
  2833. #endif
  2834.  
  2835. typedef struct TuneStatus TuneStatus;
  2836.  
  2837. #define kStopTuneFade 1
  2838.  
  2839. #define kStopTuneSustain 2
  2840.  
  2841. #define kStopTuneInstant 4
  2842.  
  2843. #define kStopTuneReleaseChannels 8
  2844.  
  2845. enum  {
  2846.     kTuneSelect                    = 3,
  2847.     kTuneSetHeaderSelect,
  2848.     kTuneGetTimeBaseSelect,
  2849.     kTuneSetTimeScaleSelect,
  2850.     kTuneGetTimeScaleSelect,
  2851.     kTuneGetIndexedNoteChannelSelect,
  2852.     kTuneDummy,
  2853.     kTuneQueueSelect,
  2854.     kTuneInstantSelect,
  2855.     kTuneGetStatusSelect,
  2856.     kTuneStopSelect,
  2857.     kTuneResumeSelect,
  2858.     kTuneFlushSelect,
  2859.     kTuneSetVolumeSelect,
  2860.     kTuneGetVolumeSelect,
  2861.     kTunePrerollSelect,
  2862.     kTuneUnrollSelect,
  2863.     kTuneLastSelector
  2864. };
  2865.  
  2866. typedef pascal void (*TuneCallBackProcPtr)(const TuneStatus *status, long refCon);
  2867.  
  2868. enum {
  2869.     uppTuneCallBackProcInfo = kPascalStackBased
  2870.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(TuneStatus*)))
  2871.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  2872. };
  2873.  
  2874. #if USESROUTINEDESCRIPTORS
  2875. typedef UniversalProcPtr TuneCallBackUPP;
  2876.  
  2877. #define CallTuneCallBackProc(userRoutine, status, refCon)        \
  2878.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTuneCallBackProcInfo, (status), (refCon))
  2879. #define NewTuneCallBackProc(userRoutine)        \
  2880.         (TuneCallBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTuneCallBackProcInfo, GetCurrentISA())
  2881. #else
  2882. typedef TuneCallBackProcPtr TuneCallBackUPP;
  2883.  
  2884. #define CallTuneCallBackProc(userRoutine, status, refCon)        \
  2885.         (*(userRoutine))((status), (refCon))
  2886. #define NewTuneCallBackProc(userRoutine)        \
  2887.         (TuneCallBackUPP)(userRoutine)
  2888. #endif
  2889.  
  2890. typedef ComponentInstance TunePlayer;
  2891.  
  2892. #define kMaxTunePlayerParts 32
  2893.  
  2894. #define kTunePlayerType 'tune'
  2895.  
  2896. extern pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  2897.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4, 0x7000, 0xA82A);
  2898. extern pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2899.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2900. extern pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2901.  FIVEWORDINLINE(0x2F3C, 0x4, 0x6, 0x7000, 0xA82A);
  2902. extern pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2903.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  2904. extern pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2905.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8, 0x7000, 0xA82A);
  2906. enum  {
  2907.     kTuneStartNow                = 1,
  2908.     kTuneDontClipNotes            = 2,
  2909.     kTuneExcludeEdgeNotes        = 4,
  2910.     kTuneStartNewMaster            = 16384
  2911. };
  2912.  
  2913. extern pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2914.  FIVEWORDINLINE(0x2F3C, 0x1C, 0xA, 0x7000, 0xA82A);
  2915. extern pascal ComponentResult TuneInstant(TunePlayer tp, unsigned long *tune, long tunePosition)
  2916.  FIVEWORDINLINE(0x2F3C, 0x8, 0xB, 0x7000, 0xA82A);
  2917. extern pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2918.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  2919. enum  {
  2920.     kStopSustain                = 1,
  2921.     kStopFadeout                = 2
  2922. };
  2923.  
  2924. extern pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2925.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  2926. extern pascal ComponentResult TuneResume(TunePlayer tp)
  2927.  FIVEWORDINLINE(0x2F3C, 0, 0xE, 0x7000, 0xA82A);
  2928. extern pascal ComponentResult TuneFlush(TunePlayer tp)
  2929.  FIVEWORDINLINE(0x2F3C, 0, 0xF, 0x7000, 0xA82A);
  2930. extern pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2931.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10, 0x7000, 0xA82A);
  2932. extern pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2933.  FIVEWORDINLINE(0x2F3C, 0, 0x11, 0x7000, 0xA82A);
  2934. extern pascal ComponentResult TunePreroll(TunePlayer tp)
  2935.  FIVEWORDINLINE(0x2F3C, 0, 0x12, 0x7000, 0xA82A);
  2936. extern pascal ComponentResult TuneUnroll(TunePlayer tp)
  2937.  FIVEWORDINLINE(0x2F3C, 0, 0x13, 0x7000, 0xA82A);
  2938. #ifndef __MusicTrackEvent__
  2939. #define __MusicTrackEvent__
  2940.  
  2941. typedef unsigned long MusicOpWord, *MusicOpWordPtr;
  2942.  
  2943. #define kRestEventType 0x0L
  2944.  
  2945. #define kNoteEventType 0x1L
  2946.  
  2947. #define kControlEventType 0x2L
  2948.  
  2949. #define kMarkerEventType 0x3L
  2950.  
  2951. #define kUndefined1EventType 0x8L
  2952.  
  2953. #define kXNoteEventType 0x9L
  2954.  
  2955. #define kXControlEventType 0xAL
  2956.  
  2957. #define kKnobEventType 0xBL
  2958.  
  2959. #define kUndefined2EventType 0xCL
  2960.  
  2961. #define kUndefined3EventType 0xDL
  2962.  
  2963. #define kUndefined4EventType 0xEL
  2964.  
  2965. #define kGeneralEventType 0xFL
  2966.  
  2967. #define kXEventLengthBits 0x2L
  2968.  
  2969. #define kGeneralEventLengthBits 0x3L
  2970.  
  2971. #define kEventLen 1L
  2972.  
  2973. #define kXEventLen 2L
  2974.  
  2975. #define kRestEventLen kEventLen
  2976.  
  2977. #define kNoteEventLen kEventLen
  2978.  
  2979. #define kControlEventLen kEventLen
  2980.  
  2981. #define kMarkerEventLen kEventLen
  2982.  
  2983. #define kXNoteEventLen kXEventLen
  2984.  
  2985. #define kXControlEventLen kXEventLen
  2986.  
  2987. #define kGeneralEventLen kXEventLen
  2988.  
  2989. #define kEventLengthFieldPos 30
  2990.  
  2991. #define kEventLengthFieldWidth 2
  2992.  
  2993. #define kEventTypeFieldPos 29
  2994.  
  2995. #define kEventTypeFieldWidth 3
  2996.  
  2997. #define kXEventTypeFieldPos 28
  2998.  
  2999. #define kXEventTypeFieldWidth 4
  3000.  
  3001. #define kEventInstrumentFieldPos 24
  3002.  
  3003. #define kEventInstrumentFieldWidth 5
  3004.  
  3005. #define kXEventInstrumentFieldPos 16
  3006.  
  3007. #define kXEventInstrumentFieldWidth 12
  3008.  
  3009. #define kRestEventDurationFieldPos 0
  3010.  
  3011. #define kRestEventDurationFieldWidth 24
  3012.  
  3013. #define kRestEventDurationMax ((1 << kRestEventDurationFieldWidth) - 1)
  3014.  
  3015. #define kNoteEventPitchFieldPos 18
  3016.  
  3017. #define kNoteEventPitchFieldWidth 6
  3018.  
  3019. #define kNoteEventPitchOffset 32
  3020.  
  3021. #define kNoteEventVolumeFieldPos 11
  3022.  
  3023. #define kNoteEventVolumeFieldWidth 7
  3024.  
  3025. #define kNoteEventVolumeOffset 0
  3026.  
  3027. #define kNoteEventDurationFieldPos 0
  3028.  
  3029. #define kNoteEventDurationFieldWidth 11
  3030.  
  3031. #define kNoteEventDurationMax ((1 << kNoteEventDurationFieldWidth) - 1)
  3032.  
  3033. #define kXNoteEventPitchFieldPos 0
  3034.  
  3035. #define kXNoteEventPitchFieldWidth 16
  3036.  
  3037. #define kXNoteEventDurationFieldPos 0
  3038.  
  3039. #define kXNoteEventDurationFieldWidth 22
  3040.  
  3041. #define kXNoteEventDurationMax ((1 << kXNoteEventDurationFieldWidth) - 1)
  3042.  
  3043. #define kXNoteEventVolumeFieldPos 22
  3044.  
  3045. #define kXNoteEventVolumeFieldWidth 7
  3046.  
  3047. #define kControlEventControllerFieldPos 16
  3048.  
  3049. #define kControlEventControllerFieldWidth 8
  3050.  
  3051. #define kControlEventValueFieldPos 0
  3052.  
  3053. #define kControlEventValueFieldWidth 16
  3054.  
  3055. #define kXControlEventControllerFieldPos 0
  3056.  
  3057. #define kXControlEventControllerFieldWidth 16
  3058.  
  3059. #define kXControlEventValueFieldPos 0
  3060.  
  3061. #define kXControlEventValueFieldWidth 16
  3062.  
  3063. #define kKnobEventValueHighFieldPos 0
  3064.  
  3065. #define kKnobEventValueHighFieldWidth 16
  3066.  
  3067. #define kKnobEventKnobFieldPos 16
  3068.  
  3069. #define kKnobEventKnobFieldWidth 14
  3070.  
  3071. #define kKnobEventValueLowFieldPos 0
  3072.  
  3073. #define kKnobEventValueLowFieldWidth 16
  3074.  
  3075. #define kMarkerEventSubtypeFieldPos 16
  3076.  
  3077. #define kMarkerEventSubtypeFieldWidth 8
  3078.  
  3079. #define kMarkerEventValueFieldPos 0
  3080.  
  3081. #define kMarkerEventValueFieldWidth 16
  3082.  
  3083. #define kGeneralEventSubtypeFieldPos 16
  3084.  
  3085. #define kGeneralEventSubtypeFieldWidth 14
  3086.  
  3087. #define kGeneralEventLengthFieldPos 0
  3088.  
  3089. #define kGeneralEventLengthFieldWidth 16
  3090.  
  3091. #define MASK(bitWidth) ((1 << (bitWidth)) - 1)
  3092.  
  3093. #define EXT(val, pos, width) (((val) >> (pos)) & MASK(width))
  3094.  
  3095. #define _EventLength(x) ((EXT(x, kEventLengthFieldPos,  \
  3096.     kEventLengthFieldWidth) < 2) ? 1 :  \
  3097.     ((EXT(x, kEventLengthFieldPos, kEventLengthFieldWidth) == 2) ? 2 :  \
  3098.     EXT(x, kGeneralEventLengthFieldPos, kGeneralEventLengthFieldWidth)))
  3099.  
  3100. #define _EventType(x) ((EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth) > 3) ? EXT(x, kXEventTypeFieldPos, kXEventTypeFieldWidth) : EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth))
  3101.  
  3102. #define _RestDuration(x) (EXT(x, kRestEventDurationFieldPos, kRestEventDurationFieldWidth))
  3103.  
  3104. #define _Instrument(x) (EXT(x, kEventInstrumentFieldPos, kEventInstrumentFieldWidth))
  3105.  
  3106. #define _XInstrument(m, l) (EXT(m, kXEventInstrumentFieldPos, kXEventInstrumentFieldWidth))
  3107.  
  3108. #define _NotePitch(x) (EXT(x, kNoteEventPitchFieldPos, kNoteEventPitchFieldWidth) + kNoteEventPitchOffset)
  3109.  
  3110. #define _NoteVolume(x) (EXT(x, kNoteEventVolumeFieldPos, kNoteEventVolumeFieldWidth) + kNoteEventVolumeOffset)
  3111.  
  3112. #define _NoteDuration(x) (EXT(x, kNoteEventDurationFieldPos, kNoteEventDurationFieldWidth))
  3113.  
  3114. #define _NoteVelocity _NoteVolume
  3115.  
  3116. #define _XNotePitch(m, l) (EXT(m, kXNoteEventPitchFieldPos, kXNoteEventPitchFieldWidth))
  3117.  
  3118. #define _XNoteVolume(m, l) (EXT(l, kXNoteEventVolumeFieldPos, kXNoteEventVolumeFieldWidth))
  3119.  
  3120. #define _XNoteDuration(m, l) (EXT(l, kXNoteEventDurationFieldPos, kXNoteEventDurationFieldWidth))
  3121.  
  3122. #define _XNoteVelocity _XNoteVolume
  3123.  
  3124. #define _ControlController(x) (EXT(x, kControlEventControllerFieldPos, kControlEventControllerFieldWidth))
  3125.  
  3126. #define _ControlValue(x) (EXT(x, kControlEventValueFieldPos, kControlEventValueFieldWidth))
  3127.  
  3128. #define _XControlController(m, l) (EXT(m, kXControlEventControllerFieldPos, kXControlEventControllerFieldWidth))
  3129.  
  3130. #define _XControlValue(m, l) (EXT(m, kXControlEventValueFieldPos, kXControlEventValueFieldWidth))
  3131.  
  3132. #define _MarkerSubtype(x) (EXT(x,kMarkerEventSubtypeFieldPos,kMarkerEventSubtypeFieldWidth))
  3133.  
  3134. #define _MarkerValue(x) (EXT(x, kMarkerEventValueFieldPos, kMarkerEventValueFieldWidth))
  3135.  
  3136. #define _KnobValue(m, l) ((EXT(m,kKnobEventValueHighFieldPos,kKnobEventValueHighFieldWidth) << 16)     \
  3137.     | (EXT(l,kKnobEventValueLowFieldPos,kKnobEventValueLowFieldWidth)))
  3138.  
  3139. #define _KnobKnob(m, l) (EXT(l,kKnobEventKnobFieldPos,kKnobEventKnobFieldWidth))
  3140.  
  3141. #define _GeneralSubtype(m, l) (EXT(l,kGeneralEventSubtypeFieldPos,kGeneralEventSubtypeFieldWidth))
  3142.  
  3143. #define _GeneralLength(m, l) (EXT(m,kGeneralEventLengthFieldPos,kGeneralEventLengthFieldWidth))
  3144.  
  3145. #define _StuffRestEvent(x, duration)  \
  3146.     x = (kRestEventType << kEventTypeFieldPos)     \
  3147.     |    ((long)(duration) << kRestEventDurationFieldPos)
  3148.  
  3149. #define _StuffNoteEvent(x, instrument, pitch, volume, duration)  \
  3150.     x = (kNoteEventType << kEventTypeFieldPos)     \
  3151.     | ((long)(instrument) << kEventInstrumentFieldPos)     \
  3152.     |    (((long)(pitch) - kNoteEventPitchOffset) << kNoteEventPitchFieldPos)     \
  3153.     |    (((long)(volume) - kNoteEventVolumeOffset) << kNoteEventVolumeFieldPos)     \
  3154.     |    ((long)(duration) << kNoteEventDurationFieldPos)
  3155.  
  3156. #define _StuffControlEvent(x, instrument, control, value)  \
  3157.     x = (kControlEventType << kEventTypeFieldPos)     \
  3158.     | ((long)(instrument) << kEventInstrumentFieldPos)     \
  3159.     |    ((long)(control) << kControlEventControllerFieldPos)     \
  3160.     |    ((long)((value) & MASK(kControlEventValueFieldWidth)) << kControlEventValueFieldPos)
  3161.  
  3162. #define _StuffXNoteEvent(w1, w2, instrument, pitch, volume, duration)  \
  3163.     w1 = (kXNoteEventType << kXEventTypeFieldPos)     \
  3164.     |    ((long)(instrument) << kXEventInstrumentFieldPos)     \
  3165.     |    ((long)(pitch) << kXNoteEventPitchFieldPos),     \
  3166.     w2 =    (kXEventLengthBits << kEventLengthFieldPos)     \
  3167.     |    ((long)(duration) << kXNoteEventDurationFieldPos)     \
  3168.     |    ((long)(volume) << kXNoteEventVolumeFieldPos)    
  3169.  
  3170. #define _StuffXControlEvent(w1, w2, instrument, control, value)  \
  3171.     w1 = (kXControlEventType << kXEventTypeFieldPos)     \
  3172.     |    ((long)(instrument) << kXEventInstrumentFieldPos)     \
  3173.     |    ((long)((value) & MASK(kXControlEventValueFieldWidth)) << kXControlEventValueFieldPos),  \
  3174.     w2 =    (kXEventLengthBits << kEventLengthFieldPos)     \
  3175.     |    ((long)(control) << kXControlEventControllerFieldPos)
  3176.  
  3177. #define _StuffKnobEvent(w1, w2, instrument, knob, value)  \
  3178.     w1 =    (kKnobEventType << kXEventTypeFieldPos)     \
  3179.     |    ((long)(instrument) << kXEventInstrumentFieldPos)     \
  3180.     |    ((long)(value >> 16) << kKnobEventValueLowFieldPos),     \
  3181.     w2 =    (kXEventLengthBits << kEventLengthFieldPos)     \
  3182.     |    ((long)(knob) << kKnobEventKnobFieldPos)     \
  3183.     |    ((long)(value & 0xFFFF) << kKnobEventValueLowFieldPos)
  3184.  
  3185. #define _StuffGeneralEvent(w1, w2, instrument, subType, length)  \
  3186.     w1 =    (kGeneralEventType << kXEventTypeFieldPos)     \
  3187.     |    ((long)(instrument) << kXEventInstrumentFieldPos)     \
  3188.     |    ((long)(length) << kGeneralEventLengthFieldPos),     \
  3189.     w2 =    (kGeneralEventLengthBits << kEventLengthFieldPos)     \
  3190.     |    ((long)(subType) << kGeneralEventSubtypeFieldPos)     \
  3191.     |    ((long)(length) << kGeneralEventLengthFieldPos)
  3192.  
  3193. #define kGeneralEventNoteRequest 1
  3194.  
  3195. #define kGeneralEventInstrument 2
  3196.  
  3197. #define kGeneralEventFlatInstrument 3
  3198.  
  3199. #define kGeneralEventPartName 4
  3200.  
  3201. #define kGeneralEventPartKey 5
  3202.  
  3203. #endif
  3204.  
  3205. #ifndef _TimeCodeMediaHandler_
  3206. #define _TimeCodeMediaHandler_
  3207.  
  3208. #define TimeCodeMediaType 'tmcd'
  3209.  
  3210. #define TCSourceRefNameType 'name'
  3211.  
  3212. enum  {
  3213.     tcDropFrame                    = 1 << 0,
  3214.     tc24HourMax                    = 1 << 1,
  3215.     tcNegTimesOK                = 1 << 2,
  3216.     tcCounter                    = 1 << 3
  3217. };
  3218.  
  3219. #if defined(powerc) || defined (__powerc)
  3220. #pragma options align=mac68k
  3221. #endif
  3222. struct TimeCodeDef {
  3223.     long                        flags;
  3224.     TimeScale                    fTimeScale;
  3225.     TimeValue                    frameDuration;
  3226.     unsigned char                numFrames;
  3227. };
  3228. #if defined(powerc) || defined(__powerc)
  3229. #pragma options align=reset
  3230. #endif
  3231.  
  3232. typedef struct TimeCodeDef TimeCodeDef;
  3233.  
  3234. enum  {
  3235.     tctNegFlag                    = 0x80
  3236. };
  3237.  
  3238. #if defined(powerc) || defined (__powerc)
  3239. #pragma options align=mac68k
  3240. #endif
  3241. struct TimeCodeTime {
  3242.     unsigned char                hours;
  3243.     unsigned char                minutes;
  3244.     unsigned char                seconds;
  3245.     unsigned char                frames;
  3246. };
  3247. #if defined(powerc) || defined(__powerc)
  3248. #pragma options align=reset
  3249. #endif
  3250.  
  3251. typedef struct TimeCodeTime TimeCodeTime;
  3252.  
  3253. #if defined(powerc) || defined (__powerc)
  3254. #pragma options align=mac68k
  3255. #endif
  3256. struct TimeCodeCounter {
  3257.     long                        counter;
  3258. };
  3259. #if defined(powerc) || defined(__powerc)
  3260. #pragma options align=reset
  3261. #endif
  3262.  
  3263. typedef struct TimeCodeCounter TimeCodeCounter;
  3264.  
  3265. #if defined(powerc) || defined (__powerc)
  3266. #pragma options align=mac68k
  3267. #endif
  3268. union TimeCodeRecord {
  3269.     TimeCodeTime                t;
  3270.     TimeCodeCounter                c;
  3271. };
  3272. #if defined(powerc) || defined(__powerc)
  3273. #pragma options align=reset
  3274. #endif
  3275.  
  3276. typedef union TimeCodeRecord TimeCodeRecord;
  3277.  
  3278. #if defined(powerc) || defined (__powerc)
  3279. #pragma options align=mac68k
  3280. #endif
  3281. struct TimeCodeDescription {
  3282.     long                        descSize;
  3283.     long                        dataFormat;
  3284.     long                        resvd1;
  3285.     short                        resvd2;
  3286.     short                        dataRefIndex;
  3287.     long                        flags;
  3288.     TimeCodeDef                    timeCodeDef;
  3289.     long                        srcRef[1];
  3290. };
  3291. #if defined(powerc) || defined(__powerc)
  3292. #pragma options align=reset
  3293. #endif
  3294.  
  3295. typedef struct TimeCodeDescription TimeCodeDescription;
  3296.  
  3297. typedef TimeCodeDescription *TimeCodeDescriptionPtr;
  3298.  
  3299. typedef TimeCodeDescriptionPtr *TimeCodeDescriptionHandle;
  3300.  
  3301. enum  {
  3302.     tcdfShowTimeCode            = 1 << 0
  3303. };
  3304.  
  3305. enum  {
  3306.     kTCGetCurrentTimeCodeSelect    = 257,
  3307.     kTCGetTimeCodeAtTimeSelect,
  3308.     kTCTimeCodeToStringSelect,
  3309.     kTCTimeCodeToFrameNumberSelect,
  3310.     kTCFrameNumberToTimeCodeSelect,
  3311.     kTCGetSourceRefSelect,
  3312.     kTCSetSourceRefSelect,
  3313.     kTCSetTimeCodeFlagsSelect,
  3314.     kTCGetTimeCodeFlagsSelect,
  3315.     kTCSetDisplayOptionsSelect,
  3316.     kTCGetDisplayOptionsSelect
  3317. };
  3318.  
  3319. #if defined(powerc) || defined (__powerc)
  3320. #pragma options align=mac68k
  3321. #endif
  3322. struct TCTextOptions {
  3323.     short                        txFont;
  3324.     short                        txFace;
  3325.     short                        txSize;
  3326.     RGBColor                    foreColor;
  3327.     RGBColor                    backColor;
  3328. };
  3329. #if defined(powerc) || defined(__powerc)
  3330. #pragma options align=reset
  3331. #endif
  3332.  
  3333. typedef struct TCTextOptions TCTextOptions;
  3334.  
  3335. typedef TCTextOptions *TCTextOptionsPtr;
  3336.  
  3337. extern pascal HandlerError TCGetCurrentTimeCode(MediaHandler mh, long *frameNum, TimeCodeDef *tcdef, TimeCodeRecord *tcrec, UserData *srcRefH)
  3338.  FIVEWORDINLINE(0x2F3C, 0x10, 0x101, 0x7000, 0xA82A);
  3339. extern pascal HandlerError TCGetTimeCodeAtTime(MediaHandler mh, TimeValue mediaTime, long *frameNum, TimeCodeDef *tcdef, TimeCodeRecord *tcdata, UserData *srcRefH)
  3340.  FIVEWORDINLINE(0x2F3C, 0x14, 0x102, 0x7000, 0xA82A);
  3341. extern pascal HandlerError TCTimeCodeToFrameNumber(MediaHandler mh, TimeCodeDef *tcdef, TimeCodeRecord *tcrec, long *frameNumber)
  3342.  FIVEWORDINLINE(0x2F3C, 0xC, 0x104, 0x7000, 0xA82A);
  3343. extern pascal HandlerError TCFrameNumberToTimeCode(MediaHandler mh, long frameNumber, TimeCodeDef *tcdef, TimeCodeRecord *tcrec)
  3344.  FIVEWORDINLINE(0x2F3C, 0xC, 0x105, 0x7000, 0xA82A);
  3345. extern pascal HandlerError TCTimeCodeToString(MediaHandler mh, TimeCodeDef *tcdef, TimeCodeRecord *tcrec, StringPtr tcStr)
  3346.  FIVEWORDINLINE(0x2F3C, 0xC, 0x103, 0x7000, 0xA82A);
  3347. extern pascal HandlerError TCGetSourceRef(MediaHandler mh, TimeCodeDescriptionHandle tcdH, UserData *srefH)
  3348.  FIVEWORDINLINE(0x2F3C, 0x8, 0x106, 0x7000, 0xA82A);
  3349. extern pascal HandlerError TCSetSourceRef(MediaHandler mh, TimeCodeDescriptionHandle tcdH, UserData srefH)
  3350.  FIVEWORDINLINE(0x2F3C, 0x8, 0x107, 0x7000, 0xA82A);
  3351. extern pascal HandlerError TCSetTimeCodeFlags(MediaHandler mh, long flags, long flagsMask)
  3352.  FIVEWORDINLINE(0x2F3C, 0x8, 0x108, 0x7000, 0xA82A);
  3353. extern pascal HandlerError TCGetTimeCodeFlags(MediaHandler mh, long *flags)
  3354.  FIVEWORDINLINE(0x2F3C, 0x4, 0x109, 0x7000, 0xA82A);
  3355. extern pascal HandlerError TCSetDisplayOptions(MediaHandler mh, TCTextOptionsPtr textOptions)
  3356.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10A, 0x7000, 0xA82A);
  3357. extern pascal HandlerError TCGetDisplayOptions(MediaHandler mh, TCTextOptionsPtr textOptions)
  3358.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10B, 0x7000, 0xA82A);
  3359. #endif
  3360.  
  3361. #endif
  3362.  
  3363.